cdi*_*nam 28 c integer-promotion implicit-conversion
我有以下C代码工作:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
return a + ((x >> 1) & mask );
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将其扩展到此时,我得到了不同的结果:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
int b = ((x >> 1) & mask );
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
造成这种差异的原因是什么?
编辑:注意,我正在为32位编译.
alk*_*alk 39
造成这种差异的原因是什么?
1个ST段返回增加两个的结果unsigned与所述结果是S(隐式地)转换为int.
的2 次片断返回增加两个的结果int秒.
更多关于" 通常的算术转换 ":