一、原码 补码 反码的基本概念
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
更多推荐
C语言取反(~)简单理解
发布评论