C语言位操作三元表达式如何改写为if else分支语句
问题分析
你提供的原始代码是C语言的三元运算符写法,核心逻辑是判断变量b的第5位(对应数值0x20即十进制32)是否为1,根据判断结果对b做不同的位处理后返回,给出的if-else改写和原始代码逻辑完全等价。
你写的代码错误点
if的判断条件里不应该加return关键字,if仅需要判断表达式b & 32的布尔结果即可- 分支内的位运算表达式
b | ~63、b & 63仅做了计算,没有赋值给变量也没有返回,运算结果会被直接丢弃,没有实际作用 - 代码末尾多了一个多余的右大括号,会触发编译语法错误
正确的if-else实现
直接返回版本
if (b & 0x20) { return b | ~0x3F; } else { return b & 0x3F; }
如果要和你用的十进制写法对应,也可以写成:
if (b & 32) { return b | ~63; } else { return b & 63; }
先存变量再返回版本
如果你需要先保存结果再做其他处理,可以用这种写法:
int result; if (b & 0x20) { result = b | ~0x3F; } else { result = b & 0x3F; } return result;
以上所有写法和你最初提供的三元运算符代码逻辑完全一致,~0x3F的运行效果也和原始代码没有区别。
内容的提问来源于stack exchange,提问作者Android AP
相关产品推荐
相关产品推荐

