位运算符:位运算符能让你逐位操控基本类型的数据。两个参数的相对应的各位分别进行布尔运算,其结果就是位运算的结果。
与运算符(&):输入位都是一则返回一,否则为零(只要有0就返回0)
或运算符(|):输入的两位当中只要有一个一,则返回一,否则返回0(只要有1就返回1)
异或运算符(^):输入的两位中有且只有一个一,则返回一,否则返回0(相同为0,不同为1)
非运算符(~):这是一个单元运算符,它只需要一个参数。它对输入位取反---------零变成一,一变成零。
注意:Boolean类型会被当做只有一位的值,你可以进行与、或、异或运算,但是不能进行非运算
基本类型的大小(bit是最小单位,1个二进制代码代表1个bit)
移位运算符:移位运算符只能用于整数型的基本类型数据。如果对char,byte或者short进行了移位,他们会被先转换成int,因此运算结果也就成了int。运算符右边那个数,只有低五位有效。这样是为了防止移位的位数超过int的位数。如果操作数是long,那么结果也是long。这是运算符右边的那个数的低六位有效,这样移位的位数就不会超过long的位数。
左移位运算符(<<):左移位会把运算符(<<)左边那个操作数向左移它右边那个数所表示的位数(低位用0填补)。如8<<3位表示把8的二进制形式左移3位,低位用0填补(8的二进制位00001000,左移三位就变为01000000)。
带符号的右移位运算符(>>):该运算符会把运算符左边的那个操作数向右移运算符右边那个数所表示的位数。带符号的右移位>>使用“根据正负号来扩展”的规则:如果这个值是正的,则改为一律填0,;如果这个值是负的,则高位一律填一。
不带正负号的右移位(>>>):它用的是"一律用零来扩展"的规则:不论正负号,高位都填零。
增补负数的二进制:负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助大家理解!
十进制 → 二进制 (怎么算?要是不知道看计算机基础的书去)
47 → 101111
有符号的整数 原码 反码 补码
47 00101111 00101111 00101111(正数补码和原码、反码相同,不能从字面理解)
-47 10101111 11010000 11010001(负数补码是在反码上加1)