#include <stdio.h>
int main(void)
{
unsigned int var=1;
var = var<<32;
printf("%u ",var);
}
该代码的产量为1
。如果我编写var = var<<31;
则产生2147483648
。移位计数操作允许什么值?
如果我输入var = 12;
然后var = var<<32;
它会产生12
。我从我的旧教科书中读到,ANSI C不允许在单个操作中将所有位移出一个值。
所有主要编译器的行为是否相同(复制粘贴输入到输出)或只是GCC将粘贴12从输入复制到输出,当我指示它执行时var = var<<32;
???
移位比数据类型中的位数多的位会导致*未定义的行为*。因此,将32位变量移位32位(或更多)是无效的。 –
@Badda这不是一个有意义的重复,因为C在位移时有很多特定于语言的行为。 – Lundin
[GCC左移溢出]可能重复(http://stackoverflow.com/questions/3871650/gcc-left-shift-overflow) –