黑马程序员技术交流社区

标题: C语言位运算总结 [打印本页]

作者: 请叫我焦卷卷    时间: 2015-9-27 17:18
标题: C语言位运算总结
位运算(对整数在内存中的二进制位进行操作,所有位运算只能操作整型)
作用:直接通过操作二进制位来运算,高效
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





作者: 许庭洲    时间: 2015-9-28 14:01
值得学习ing!
作者: 超の    时间: 2015-9-28 17:17
整理的很好,值得学习
作者: Windnon    时间: 2015-9-28 21:19
整理的不错,仔细看看,
作者: 尾尾    时间: 2015-9-28 21:43
不错不错 加油加油
作者: CherryQueen    时间: 2015-9-28 21:51
不错整理的很详细,值得学习。
作者: 董志军    时间: 2015-9-28 21:55
赞一个,再赞一个,在在在一个
作者: 倪达    时间: 2015-9-28 21:57
不用看,加油吧
作者: tz19900926    时间: 2015-9-28 22:01
总结的很全呢,这一块学的一般
作者: chensc    时间: 2015-9-28 22:03
学习学习!
作者: chensc    时间: 2015-9-29 06:20
学习学习!
作者: 杰杰    时间: 2015-9-29 08:04
涨姿势了。
作者: 请叫我焦卷卷    时间: 2015-9-30 13:18
许庭洲 发表于 2015-9-28 14:01
值得学习ing!

一起学习!
作者: 请叫我焦卷卷    时间: 2015-9-30 13:20
超の 发表于 2015-9-28 17:17
整理的很好,值得学习

haha~一起学习~
作者: 请叫我焦卷卷    时间: 2015-9-30 13:21
Windnon 发表于 2015-9-28 21:19
整理的不错,仔细看看,

好的~`````~~~
作者: chensc    时间: 2015-9-30 21:21
学习学习!
作者: LPz1994    时间: 2015-10-1 09:18
赞一个,再赞一个,在在在一个





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2