相关疑难解决方法(0)

当使用超过32次时,32位整数为什么不按预期工作,为什么不移位"<<"?

当我编写以下程序并使用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 .

c++ bit-shift

59
推荐指数
7
解决办法
5万
查看次数

无符号和签名扩展

有人可以向我解释以下代码输出:

void myprint(unsigned long a)
{
    printf("Input is %lx\n", a);
}
int main()
{
    myprint(1 << 31);
    myprint(0x80000000);
}
Run Code Online (Sandbox Code Playgroud)

输出gcc main.c:

Input is ffffffff80000000
Input is 80000000
Run Code Online (Sandbox Code Playgroud)

为什么被(1 << 31)视为签名并被0x80000000视为未签名?

c unsigned language-lawyer

10
推荐指数
2
解决办法
1816
查看次数

为什么(1 << 31)>> 31导致-1?

int z = 1;
z <<= 31;
z >>= 31;
printf ("%d\n",z);
Run Code Online (Sandbox Code Playgroud)

当我运行代码时z=-1,为什么?

c c++ bit-shift

3
推荐指数
2
解决办法
2198
查看次数

标签 统计

bit-shift ×2

c ×2

c++ ×2

language-lawyer ×1

unsigned ×1