我编写了一个程序,它使用C ++中的按位运算符显示特定整数值的二进制表示。对于偶数,它按预期工作,但对于奇数,它在二进制表示的左边加1。
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{
unsigned int a = 128;
for (int i = sizeof(a) * 8; i >= 0; --i) {
if (a & (1UL << i)) { // if i-th digit is 1
cout << 1; // Output 1
}
else {
cout << 0; // Otherwise output 0
}
}
cout << endl;
system("pause");
return 0;
}
结果:
答案 0 :(得分:4)
#include <climits>
)。unsigned int
具有32位,则您的起始值为int i = 4*8
,因此1U << i
会将值移出范围。这是未定义的行为,可能导致任何事情,显然,您的特定编译器或硬件转换%32
,因此您得到一个初始value & 1
,导致意外的前导1 ..你有没有注意到你实际打印出的是33位而不是32位?答案 1 :(得分:2)
问题在于:
for (int i = sizeof(a) * 8; i >= 0; --i) {
它应该是:
for (int i = sizeof(a) * 8; i-- ; ) {