按位非计算

按位非

正整数的补码,反码是其本身.

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
*/
posted @ 2022-10-13 11:02  不需要名字  阅读(162)  评论(0编辑  收藏  举报