位运算(对整数在内存中的二进制位进行操作,所有位运算只能操作整型) 作用:直接通过操作二进制位来运算,高效 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
|