一、原码 补码 反码的基本概念

1.原码:就是符号位加上真值的绝对值
2.反码:正数的反码是其本身,负数的反码是其原码符号位不变,其余位取反
3.补码:正数的补码是其本身,负数的补码是其反码加1(保留符号位,其他位+1)
注意:计算机内数值以补码进行存储

二、原理解析

结论:~的结果为其本身正负变号,然后-1(符号变号,大小-1)
(~按位取反,符号位也需要取反,即0–1,1–0)
计算机输入数值保存过程
输入数->转为二进制补码保存在计算机中
按位取反(~)过程
对计算机内保存的补码进行按位取反->求得按位取反数值的补码->求其反码->求其原码

原理:按位取反的计算

正整数取反: 例如 1 (1字节8位数)

原码: 0000 0001
-> 补码:0000 0001
-> 取反:1111 1110
(此时为负数,计算机内数值以补码保存,会认为这是一个负数的补码,负数原码和补码不同需要转变为反码,再转变为原码 )
-> 补码+(-1)转变为其反码:1111 1101
->反码除符号位按位取反得到其原码1000 0010 即 -2;
所以输出-2

负整数的取反过程: 例如 -1 (1字节8位数)
原码: 1000 0001 (以补码形式存储,负数应该先求补码)
-> 反码:1111 1110
->补码:1111 1111(计算机以补码保存)
->取反:0000 0000 即 0(正数的原码反码补码相同);
所以输出为0

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐