奇怪的位移行为
Odd bit shifting behavior
我有以下有效的 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 位编译它。
What is the reason for this difference?
第 1st 片段 returns 添加两个 unsigned
的结果,结果被(隐式)转换为 int
.
第 2nd 片段 returns 添加两个 int
的结果 .
有关“常用算术转换”的更多信息:
- Usual arithmetic conversions in C : Whats the rationale behind this particular rule
- C usual arithmetic conversions
我有以下有效的 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 位编译它。
What is the reason for this difference?
第 1st 片段 returns 添加两个 unsigned
的结果,结果被(隐式)转换为 int
.
第 2nd 片段 returns 添加两个 int
的结果 .
有关“常用算术转换”的更多信息:
- Usual arithmetic conversions in C : Whats the rationale behind this particular rule
- C usual arithmetic conversions