lin*_*ing 1 c bitwise-operators
我不明白这段代码的输出:
main() {
int ret = ~(~0 <<5) << 2;
printf("ret: %d, %u\n", ret, ret);
}
output:
ret: 124, 124
Run Code Online (Sandbox Code Playgroud)
如果我在精神上处理,我这样做:
我做错了什么 ?
int默认情况下,C中的积分文字是s,int通常是4个字节长(取决于编译器).这意味着~0不是1,它是32 1.
~0 == 11111111111111111111111111111111
~0 << 5 == 11111111111111111111111111100000
~(~0 << 5) == 00000000000000000000000000011111
~(~0 << 5) << 2 == 00000000000000000000000001111100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |