位运算符和移位运算符

位运算符

主要应用在二进制中运算中。

与(&)运算符

示例:

  • 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位的值有意义

你可能感兴趣的:(数学,运算符)