C/C++的移位(32位CPU)

来源:互联网 发布:java中final 编辑:程序博客网 时间:2024/05/28 23:12

一、左移

例1:

若        int i = 0x400000000;// 0100...00(32位)

执行      i = i << 1; 

则          i = 0x80000000;// 1000...00(32位)

可以看到i的符号位被设置为1,即 i = -2147483648

再执行    i = i << 1;

则           i = 0;// 000...00(32位)


 *注: C语言的左移操作采用了丢弃最高位的处理方法。


 例2:

若        unsigned i = 0x40000000;// 0100...00(32位)

    i = i << 1;

 则         i = 2147483648// 1000...00(32位)

        再执行  i = i << 1;

        则         i = 0; // 000...00(32位)


二、右移

  例1:

若        int i = 0x80000000;// 1000...000(32位)

执行    i = i >> 1;

则        i = 0xC0000000;// 1100...00(32位)

再执行i = i >> 1;

则        i = 0xE0000000;// 1110...00(32位)


 *注: C语言的右移操作采用了符号位参与移位的方式,对于正数进行补0,负数补1。


  例2:

                unsigned i = 0x80000000;

                    i = i >> 1;

                 i = 0x40000000;

        再执行  i = i >> 1;

        则         i = 0x20000000;



0 0
原创粉丝点击