您的位置:首页 > 编程语言 > C语言/C++

C语言位运算总结

2016-04-26 15:17 344 查看
位运算(对整数在内存中的二进制位进行操作,所有位运算只能操作整型)

作用:直接通过操作二进制位来运算,高效

1、&按位与 同1为1

2、|按位或 同0为0

3、^按位异或   相同为0 不同为1

     0)一个整数^0结果是本身

     1)相同整数相^是0

     2)一个数^另一数两次结果不变2^3^3==2

     3)整数相^与顺序无关   3^2^3==2

4、~取反(单目运算)  对整数的各二进位取反,包括符号位 0-1 1-0

   1、计算机里,补码原码反码,表现形式不同,最终表示的结果是一样的,是指真实的值相等,三码为了计算机运算方便

   2、正整数:补码==反码==原码       表现形式相同

   3、负整数:原码:有符号数的二进制数

            反码 = 原码符号位不变其余取反

            补码=反码+1

   4、取反的快捷运算 == (-)原数-1   ~2==(-2)-1

5、<<左移:

          1)方法:把整数的各二进位全部左移n位,高位舍弃(包括符号位),低位补0 。

          2)规律:原数 << n  == 原数*2 ^ n

                  但移动后符号位变化除外,符号位改变则正负改变,此时规律不可用

          3)注意:左移时符号位也跟着移动

6、>>右移:

        1)方法:符号位不变,除符号位,整体右移n位,低位舍弃。高位的空缺是正数补0,是负数补0/1由编译器决定。

        2)规律:原数 >> n  == 原数÷2 ^ n  

                不会改变原数的正负,此规律适用于所有右移

        3)注意:右移时符号位不跟着移动

    3>>1

    00000000 00000000 00000000 00000011

    0 0000000 00000000 00000000 0000001 1(移出)

-----------------------------------------------

    符号位是0,高位由于右移产生的空位补0

    00000000 00000000 00000000 00000001---1

    3>>2

    00000000 00000000 00000000 00000011

    0  0000000 00000000 00000000 000000 11(移出)

----------------------------------------------

    00000000 00000000 00000000 00000000---0

7、注意:浮点数不能位移运算

8、为什么计算机内需要位移运算

   1)一般思路计算乘法

    7*8 == 7*2^3 == 7<<3     0111

                             00111000 == 56

    0111

    1000

   ------

    0000

   0000

  0000

0111

-------

00111000 == 56
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: