i**********b 发帖数: 77 | 1 从一到面试题里想到的问题。
0x80000001 >> 1 == 0xC0000000;
0x80000001 << 1 == 2;
C++ 测试过的。
第一个是把left most的bit copy 了一下。跟我理解的一样。
第二个呢?很奇怪呀。如果把right most的bit copy 一下应该得到3呀。 怎么是2呢? |
d***d 发帖数: 24 | 2 Default is to fill 0, not copy
Since the number is signed integer, when you right shift, the sign bit gets
copied.
【在 i**********b 的大作中提到】 : 从一到面试题里想到的问题。 : 0x80000001 >> 1 == 0xC0000000; : 0x80000001 << 1 == 2; : C++ 测试过的。 : 第一个是把left most的bit copy 了一下。跟我理解的一样。 : 第二个呢?很奇怪呀。如果把right most的bit copy 一下应该得到3呀。 怎么是2呢?
|
g*******y 发帖数: 1930 | 3 你知道为什么右移要copy最高位吗?先把这个理解一下
【在 i**********b 的大作中提到】 : 从一到面试题里想到的问题。 : 0x80000001 >> 1 == 0xC0000000; : 0x80000001 << 1 == 2; : C++ 测试过的。 : 第一个是把left most的bit copy 了一下。跟我理解的一样。 : 第二个呢?很奇怪呀。如果把right most的bit copy 一下应该得到3呀。 怎么是2呢?
|
i**********b 发帖数: 77 | 4 how to fill with 1 during left shift then?
gets
【在 d***d 的大作中提到】 : Default is to fill 0, not copy : Since the number is signed integer, when you right shift, the sign bit gets : copied.
|