[英]How does C++ compiler represent int numbers in binary code?
我编写了一个程序,它使用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;
}
结果:
#include <climits>
)。 unsigned int
具有32位,则起始值为int i = 4*8
,因此1U << i
将值移出范围。 这是未定义的行为,并且可能导致任何事情,显然,您的特定编译器或硬件移位%32
,因此您得到初始value & 1
,导致意外的前导1 ...您是否注意到您实际打印出33位数字而不是只有32? 问题出在这里:
for (int i = sizeof(a) * 8; i >= 0; --i) {
它应该是:
for (int i = sizeof(a) * 8; i-- ; ) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.