zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

计算机按位取反[通俗易懂]

计算机 通俗易懂 按位 取反
2023-06-13 09:13:01 时间

大家好,又见面了,我是你们的朋友全栈君。

概念

*二进制数在内存中以补码的形式存储。

~是按位取反运算

可以通过原码、反码和补码三者的含义及关系来介绍三者之间的换算关系: 1、原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符号位。 2、反码 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反 第一位是符号位。 3、补码 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 第一位是符号位。 注:补码的补码等于原码,如:-1的补码为11111111,则11111111的反码为10000000 补码为10000001(-1的原码)。


实例

~1=-2

步骤一:1的二进制码 0000 0001 步骤二:1的补码 0000 0001 步骤三:按位取反 1111 1110 步骤四:求其原码(负数的补码求其原码 是-1取反) 补码-1为 1111 1101 然后取反 1000 0010 为-2


~2 =1

步骤一:2的二进制原码 1000 0010 步骤二:2的补码(负数补码为取反+1) 取反 1111 1101 先+1 1111 1110 步骤三:按位取反(正数的补码还是其本身 ,补码->本身 不变) 0000 0001 其原码 0000 0001(为1)


实际运算举例 ~5

简单:加1符号位变 变-6

~-5 简单:负数就是加1 符号位变 4

总结

在按位取反的过程中 注意计算机存储的是每个数的补码,所以先求其补码,然后全部位按位取反 再求其原码 在再求其原码注意现在是正数还是负数

正数的反码是其本身 正数的补码是其本身 负数的反码是除符号位其他全部按位取反 负数的补码是反码+1

最后总结 求补码,按位取反,求原码为结果 最后总结 求补码,按位取反,求原码为结果 最后总结 求补码,按位取反,求原码为结果

新总结

符号位(变化) +其他全部变化

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170479.html原文链接:https://javaforall.cn