记录下Java中的按位非操作,上学的时候弄清楚之后就忘掉了,今天看Java编程思想遇到顺手记录下,如有错误欢迎批评指正。
正数的补码,反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反,补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
二进制数在内存中是以补码的形式存放的;补码首位是符号位,0表示此数为正数,1表示此数为负数。按位取反运算符“~”的原理
是将内存中的补码按位取反(包括符号位)
负数以-5为例:
原码为:10000000 00000000 00000000 00000101
得到补码:11111111 11111111 11111111 11111011
按位取反(包括符号位):00000000 00000000 00000000 00000100
因为符号位为0,表示正数补码,正数原码与补码相同,输出,得到4。
正数以5为例:
原码为:00000000 00000000 00000000 00000101
得到补码:00000000 00000000 00000000 00000101
按位取反(包括符号位):11111111 11111111 11111111 11111010
因为符号位位1,表示负数补码,输出时,先减1,再取反(不包括符号位),得到原码00000000 00000000 00000000 00000110,输出,得到6。