位运算符
主要应用在二进制中运算中。
与(&)运算符
示例:
- 0&0=0 必须全部位1则为1,否则为0
- 0&1=0
- 1&0=0
- 1&1=1 全部为1,结果为1
非(~)运算符
- 非运算符即取反运算,1变0,0变1。
~1110010
= 0001101
或(|)运算符
示例:
- 0&0=0 两个数有任意一个为1则结果为1,否则为0
- 0&1=1
- 1&0=1
- 1&1=1
异或(^)运算符
规则:同为假,异为真
示例:
- 0^0=0
- 1^0=1
- 0^1=1
- 1^1=0
移位运算符
左移运算符(<<)
value << num , 使指定值value所有的位都左移规定的次数num
运算规则:
- 丢弃最高位,0补最低位
- 若移动的位数超过了该类型的最大位数,那么编译器对移动的位数取模,即int型移动了33位,只移动了33%32=1位
- 当移动的运算数是byte和short类型时,将自动把这些类型扩大位int
- 当移进高阶位(符号位)31位或63位,那么该值将变为负数
数学意义:在数字没有溢出的情况下,对于正数和负数,左移一位相当于乘以2的1次方,左移n位相当于乘以2的n次方
示例:4 << 2= 4 * 2 * 2 = 16 , 5 << 3 = 5 * 2 * 2 * 2 = 40
右移运算符(>>)
value >> num , 使指定值value所有的位都右移指定的次数num
运算规则:
- 最低位移除,高位的空位补符号位,即正数补0,负数补1
- 当移动的运算数是byte和short类型时,将自动把这些类型扩大位int
数学意义:右移一位相当于除2,右移n位相当于除以2的n次方
示例:4 >> 2 = 1 , 8 >> 2 = 2
无符号右移(>>>)
value >>> num 忽略符号位的拓展,0补最高位
无符号右移的规则和右移运算符运算一样,只是填充时不管左边的数字是正或者负都是用0来填充的,针对负数计算有意义,对正数无意义
无符号右移运算符 >>> 只是对32位和64位的值有意义
位运算符和移位运算符
最新推荐文章于 2024-08-07 09:12:44 发布