我有以下可用的C代码:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
return a + ((x >> 1) & mask );
}
然而,当我将其扩展到此时,我得到了不同的结果:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
int b = ((x >> 1) & mask );
return a + b;
}
造成这种差异的原因是什么?
编辑: 注意,我正在为32位编译它。
答案 0 :(得分:39)
造成这种差异的原因是什么?
1 st 片段返回添加两个unsigned
的结果,其结果是(隐式)转换为int
。
2 nd 片段返回添加两个int
s的结果。
更多关于" 通常的算术转换":