黑马程序员技术交流社区
标题: 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-30 13:20
haha~一起学习~
作者: 请叫我焦卷卷 时间: 2015-9-30 13:21
好的~`````~~~
作者: chensc 时间: 2015-9-30 21:21
学习学习!
作者: LPz1994 时间: 2015-10-1 09:18
赞一个,再赞一个,在在在一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |