Bra*_*don 4 c bits bit-shift low-level
我正在抛出一些C代码,我需要将32位int 32位移位.当我使用参数n = 0运行此代码时,不会发生移位.
int x = 0xFFFFFFFF;
int y = x << (32 - n);
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
Who*_*aig 10
转移自己的危险.根据标准,您要做的是未定义的行为.
C99§6.5.7
3 - 对每个操作数执行整数提升.结果的类型是提升的左操作数的类型.如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义.
换句话说,如果您尝试将32位值移动超过31位或负数,则结果是未定义的.
归档时间: |
|
查看次数: |
2451 次 |
最近记录: |