This question already has answers here:
unexpected behavior of bitwise shifting using gcc
(1个答案)
Unexpected C/C++ bitwise shift operators outcome
(6个答案)
6年前关闭。
输出:
如果我取j = 33,则
很抱歉提出这样的问题。我是初学者,所以我不明白编译器在这里做什么。你可以解释吗?
(1个答案)
Unexpected C/C++ bitwise shift operators outcome
(6个答案)
6年前关闭。
main()
{
int i=-1,j=32,k;
k=i<<j;
printf("i=%d j=%d k=%d\n",i,j,k);
}
输出:
i=-1 j=32,k=-1
如果我取j = 33,则
k=-2
,如果j = 34,则k = -4。它在左移32次后重复,即如果j = 64,k变为-1,如果j = 65,则k = -2。但逻辑上应该丢失位,即输出为0。这里发生了什么。很抱歉提出这样的问题。我是初学者,所以我不明白编译器在这里做什么。你可以解释吗?
最佳答案
将值移位等于或大于其大小的值时,您不能指望获得有意义的结果。从标准:
如果右操作数的值为负或大于或
等于提升的左操作数的宽度,其行为为
未定义。
10-08 05:22