按位非
正整数的补码,反码是其本身.
eg:1的原码是0000 0001,反码和原码是0000 0001
负整数的补码,是符号位不变,其余位按位取反,再加1。
eg:-1的原码是1000 0001,补码1111 1111
负整数的反码,是符号位不变,其余位取反。
eg:-1的原码是1000 0001,则反码是1111 1110
二进制数在内存中是以补码的形式存放的,补码首尾是符号位,0表示是正整数,1表示是负整数,按位取反符号~
,其原理是:将内存中的补码按位取反(包括符号位)
正整数
7为例
/**
0000 0000 0000 0000 0000 0000 0000 0111 原码
0000 0000 0000 0000 0000 0000 0000 0111 补码
1111 1111 1111 1111 1111 1111 1111 1000 按位取反(包括符号位)
因为符号位为1,表示负数,先取反(不包括符号位),
1000 0000 0000 0000 0000 0000 0000 0111
再加1,得到原码
1000 0000 0000 0000 0000 0000 0000 1000
8,符号位为1,为-8
*/
负整数
-7
/**
1000 0000 0000 0000 0000 0000 0000 0111 原码
1111 1111 1111 1111 1111 1111 1111 1000 反码(不包括符号位)
1111 1111 1111 1111 1111 1111 1111 1001 低位+1,得到补码
0000 0000 0000 0000 0000 0000 0000 0110 按位取反(包括符号位)
因为符号位为0,表示正整数,正整数原码和补码相同,得到原码
0000 0000 0000 0000 0000 0000 0000 0110
2+4=6,符号位为0,为6
*/
标签:0000,符号,补码,1111,计算,位非,原码,1000
From: https://www.cnblogs.com/zhoutian1532/p/16787462.html