如何仅用单个if语句等价改写给定的C++多分支判断代码
实现思路
原代码的分支逻辑本质是对无符号整数x做分段映射:
- x∈[0,1] → y=1
- x∈[2,3] → y=2
- x∈[4,5] → y=3
- x≥6 → y=6
由于x是无符号类型,原判断中的x>=0是恒成立的冗余条件,可以直接省略。我们可以利用无符号整数的整除特性,仅用单个if语句实现完全等价的逻辑。
等价代码
unsigned int x, y; cin >> x; if (x < 6) { y = x / 2 + 1; } else { y = 6; }
如果更看重可读性不想用整除计算,也可以用查找表实现:
unsigned int x, y; cin >> x; const unsigned int value_map[] = {1,1,2,2,3,3}; if (x < sizeof(value_map)/sizeof(value_map[0])) { y = value_map[x]; } else { y = 6; }
逻辑验证
- x取0或1时,整除2结果为0,y=0+1=1,符合原逻辑
- x取2或3时,整除2结果为1,y=1+1=2,符合原逻辑
- x取4或5时,整除2结果为2,y=2+1=3,符合原逻辑
- x≥6时走else分支赋值6,符合原逻辑
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

