我真的不明白为什么我必须b在反演后对变量进行类型转换(一元operator ~).任何人都可以解释为什么需要它吗?
unsigned char a = 0xFF;
unsigned char b = 0x00;
return (a == (~b)); //expected to return 1 but 0
...
return (a == (unsigned char)(~b)); //after typecast returns 1 as expected
Run Code Online (Sandbox Code Playgroud)
结果~b就是推动型的int(一般结果b与其他任何一元运算符+,-或~),所以你需要强制转换的结果.
来自C11规范草案第6.5.3.3节一元算术运算符:
〜运算符的结果是其(提升的)操作数的按位补码(即,当且仅当未设置转换后的操作数中的相应位时,才会设置结果中的每个位). 整数提升在操作数上执行,结果具有提升类型.如果提升的类型是一个无符号类型,表达式〜E是相当于在该类型减去Ë最大值表示的.
所以,
unsigned char b = 0x00;
/* ~b = 0xFFFFFFFF (assuming 4 byte int), (unsigned char)~b = 0xFF */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |