当我编写以下程序并使用GNU C++编译器时,1我认为输出是由编译器执行的旋转操作引起的.
#include <iostream>
int main()
{
int a = 1;
std::cout << (a << 32) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但从逻辑上讲,正如所说的那样,如果位溢出位宽就会丢失,输出应为0.发生了什么?
代码在ideone上,http: //ideone.com/VPTwj .
我想打印一个二进制表示int.我的解决方案似乎对工作都int和unsigned int在Visual Studio中,但有人告诉我,这是错误的.有人看到错误吗?如果是这样,为什么我的程序似乎对我有用?
void printbin(int n)
{
unsigned int i = 1<<31;
for (int j=0; j<32; j++)
{
if ((n & i) != 0)
printf("1");
else
printf("0");
i = i>>1;
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)