按位右移大数

时间:2012-11-05 17:37:04

标签: c bit-manipulation clang

如果我这样做,为什么我得不到正确答案:

long long number = 5500000000000000; // 16 digit number - 53bit
long long temp_number = 0;

temp_number = number >> 50;

printf("%d", temp_number);

答案是:4

这不正确,我希望它显示5。

亲切的问候

2 个答案:

答案 0 :(得分:4)

该数字的位模式是:

10011100010100011100010001010010000111100000000000000

当向右移动50个位置时,你基本上丢弃了50个最低有效位,所以你只剩下:

100

巧合的是,这是4。

答案 1 :(得分:4)

5500000000000000 = 0000 0000 0001 0011 1000 1010 0011 1000 1000 1010 0100 0011 1100 0000 0000 0000

当你换班50时,你得到:

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 = 4

只有向右移动才能使它成为5。