java的位运算以及二进制和十六进制

java的位运算以及二进制和十六进制

一、二进制
  计算机内部表示数的字节长度是固定的,比如8位,16位,32位。所以在高位补齐,java中字节码是8位的,最高位是符号位,1个字节是八个二进制。此时从个位开始计算2的幂(个位是0,依次往后推)乘以对应位数上的数,然后得到的值想加。0000 0101表示的是(2的0次幂)*1+(2的1次幂)*0+(2的2次幂)*1 =5。
二、十六进制
  十六进制是一种特殊的二进制,是由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成
,字母不区分大小写,java用0X或者0x开头表示是十六进制,是数字0不是字母O。此时从个位开始计算16的幂(个位是0,依次往后推)乘以对应位数上的数,然后得到的值想加。2^4等于16,所以说十六进制是特殊的二进制。
三、>>,<<,>>>
  >>运算符是向右移多少位,比如4 >> 1 即0000 0100 向右移1位得到0000 0010即为2。
  <<运算符是向左移多少位,比如4 << 1 即0000 0100 向左移1位得到0000 1000即为8。
  >>>运算符是向右移多少位,忽略符号位,空位以0补齐,比如-4 >>> 1 即1000 0100想左移1位,同时忽略符号位得到1000 0010即为-2。
四、&,|,^,~
  位与运算符 ( & ) 运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。比如:129&128,129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000000,即128。
  位或运算符 ( | ) 运算规则:两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。比如:129|128,129转换成二进制就是10000001,128转换成二进制就是10000000。从高位开始比较得到,得到10000001,即129。
  位异或运算符 ( ^ ) 运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。 比如:8^11,8转为二进制是1000,11转为二进制是1011.从高位开始比较得到的是:0011.然后二进制转为十进制,就是3。
  位非运算符(~ )运算规则是:比如:~37,在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit,8转为二进制是100101。
补码后为: 00000000 00000000 00000000 00100101
取反为: 11111111 11111111 11111111 11011010
因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。
因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:
00000000 00000000 00000000 00100110,此时二进制转原码为38
所以~37 = -38. (正数变成负数再-1,负数变正数再-1)

猜你喜欢

转载自blog.csdn.net/qq_38019655/article/details/83858645