按位非~
按位非是将二进制码中0变成1,1变成0.计算机存储数字是用机械码存储的,所以要将所给的整型数字转化成二进制.先以正数为例
eg: 3转化成二进制码就是0000 0000 0000 0000 0000 0000 0000 0011
//3是以Int型存储的,占4个字节,32位.转化后的二进制的第一个数字代表正负,0代表这个数是正数,1代表这个数是负数.且正数的原码,反码,补码是一样的
因为3的原码和补码是一样的,所以3的补码是0000 0000 0000 0000 0000 0000 0000 0011.如果是负数的话要先将原码取反,在转换成补码.(后面有说明)
得到3的补码后再进行按位非计算
补码:0000 0000 0000 0000 0000 0000 0000 0011
按位非计算后:1111 1111 1111 1111 1111 1111 1111 1100
因为二进制码的第一个数是1,代表这个数是负数,如果按位非计算后得到的数是负数,就要将其减一再取反.
减一后:1111 1111 1111 1111 1111 1111 1111 1011
然后再进行取反后:1000 0000 0000 0000 0000 0000 0000 0100,这个就是最后的结果了,转化成十进制数就是-4.附上正数的记忆方法:~(A)=-(A+1)
//负数的反码就是第一个数字不变(符号位不变)后面的每个数都要取反
再举一个负数的例子:eg:-3
-3的原码是1000 0000 0000 0000 0000 0000 0000 0011因为负数想要求补码,要先将原码取反,再求补码,所以先将原码取反:0111 1111 1111 1111 1111 1111 1111 1100,再求补码:0111 1111 1111 1111 1111 1111 1111 1101,因为得到的是正数,所以这个就是结果.
//补码就是反码的基础上再加1
位运算符<<,>>
左移运算符(<<):将数的二进制码全部左移若干位,左边超出的二进制位舍弃,并再末尾补0(左移多少个位就补多少个0),如果数字没有溢出的话,左移n个单位就相当于乘以2的n次方.eg:4<<2的结果位16
右移动运算符(>>):将数的二进制码像右移动若干个位,超出的部分舍弃,空位正数补0,负数补1.eg:7>>2.的结果为1