首页 > 编程知识 正文

反码补码原码转换c语言程序,c语言的补码与反码

时间:2023-05-03 05:34:09 阅读:219897 作者:2645

参考链接:https://www.cnblogs.com/jialiangliang/p/6044700.html
原码、反码和补码

1).数据在内存中存储的时候都是以二进制的形式存储的.

int num = 10;原码、反码、补码都是二进制.只不过是二进制的不同的表现形式.数据是以补码的二进制存储的.

2). 1个int类型的变量.在内存中占据4个字节, 32位.

00000000 00000000 00000000 00000000在不考虑正负的情况下.1个int类型的变量可以表示接近43e种数据.为了可以表示正负性.使用最高为来表示这个数的正负性.如果最高为是0 那么表示这个数是1个正数如果最高为是1 那么表示这个数是1个负数.所以,来表示数据的只有31位. 所以,1个int类型的变量.最小值是: -2147483648 最大值是:2147483647

3). 原码

最高位表示符号位. 剩下的位数.是这个数的绝对值的二进制.10的原码.00000000 00000000 00000000 00001010-8的原码.10000000 00000000 00000000 00001000绝对值: 正数的绝对值是自己,负数的绝对值去掉负号.-20.10000000 00000000 00000000 00010100

4). 反码

正数的反码就是其原码.负数的反码就是在其原码的基础之上 **符号位不变**,其他位取反.10的反码:10的原码:00000000 00000000 00000000 0000101010的反码:00000000 00000000 00000000 00001010-8-8的原码:10000000 00000000 00000000 00001000-8的反码:11111111 11111111 11111111 11110111

5). 补码

正数的补码就是其原码.负数的补码就是在其**反码的基础之上+1**10.10的原码:00000000 00000000 00000000 0000101010的反码:00000000 00000000 00000000 0000101010的补码:00000000 00000000 00000000 00001010-8-8的原码:10000000 00000000 00000000 00001000-8的反码:11111111 11111111 11111111 11110111-8的补码:11111111 11111111 11111111 11111000

6). 任何数据都是以其二进制的补码形式存储在内存中的.

int num = -8;

7). 为什么数据要以补码的形式存储呢?

计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.3 + 2;3 - 2; 这个减法运算对于计算机而言它的理解是 3 + (-2); 1使用原码计算.3的原码 00000000 00000000 00000000 00000011-2的原码 10000000 00000000 00000000 00000010 ---------------------------------------------------- 10000000 00000000 00000000 00000101 结果是1个负数明显是不对的**(十进制表示是-5)**使用反码计算.3 的反码: 00000000 00000000 00000000 00000011-2的反码: 11111111 11111111 11111111 11111101 -------------------------------------------------- 00000000 00000000 00000000 00000000 0(全部相加进1**溢出**)使用补码计算(只有补码计算对)3 的补码: 00000000 00000000 00000000 00000011-2的补码: 11111111 11111111 11111111 11111110 ------------------------------------------------- 00000000 00000000 00000000 00000001 1(全部相加进1**溢出**)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。