-1

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

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

temp_number = number >> 50;

printf("%d", temp_number);

答案是:4

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

亲切的问候

4

2 回答 2

4

该数字的位模式是:

10011100010100011100010001010010000111100000000000000

右移 50 位时,您实际上是丢弃了 50 个最低有效位,因此您剩下:

100

巧合的是,这是4。

于 2012-11-05T17:41:05.983 回答
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 的。

于 2012-11-05T17:41:51.833 回答