C语言的位移操作 (左移,右移)

2012-11-26 12:34:53 · 作者: · 浏览: 409

    2的二进制是0010

    如果你的数只有4个位的.

    2            0010

    (0)0100           //这是左移了1位.前边括号里的0没了.最后那个0是补充的.

    5           0101

    (01)0100            //向左移了两位.前边括号里的01没了.后边补充两个0.所以就是0100.

    注意:向右移动也是和向左移动一样.移出去的位就不见了.

    向右移位运算时用无符号数来运算.因为无符号数右移时.它在前边补充的总是0.

    而有符号数有可能补充的是符号位.也有可能补充的是0.是没有规定的.比较麻烦.

    左移几位就相当于乘以2的几次方(在没有溢出的前提下)

    右移几位就相当于除以2的几次方(在没有溢出的前提下, 且右边保证补零的前提下)

    注意: 左移 ,右移 注意溢出的情况

    左永远移补 0

    右移, 无符号数据时补 0 ,其他情况补能确定