c语言补码 函数,第06天C语言(03):原码补码反码

#pragma mark 原码补码反码 ###pragma mark 概念

###pragma mark 代码

#include

int main()

{

// 其实,数据存储在内存中都是存储的二进制

// 二进制又可以分为 源码/反码/补码

// 其实最终存储在内存中的 是“补码”

#pragma mark 正数存储的 原码、补码、反码

/*

// 9 --> 存储在内存中 --> 二进制

// 9 是整型 == int == 4个字节 == 1个字节8位 == 整型有32位

0000 0000 0000 0000 0000 0000 0000 1001 (原码)

什么是反码 ,正数的反码就是正数的原码

什么是补码 ,正数的补码就是正数的原码

总结一句话 : 正数的原码补码反码都是一样的 , 三码合一

*/

#pragma mark 负数存储的 原码、补码、反码

/*

// -9 --> 存储在内存中 --> 二进制

其实二进制的第一位是二进制的符号位,如果该位是0代表这个数是一个正数

1000 0000 0000 0000 0000 0000 0000 1001 (原码)

反码 : 符号位不变, 其他位取反(0变1 1变0)

1111 1111 1111 1111 1111 1111 1111 0110 (反码)

补码 : 反码 + 1 就是补码

1111 1111 1111 1111 1111 1111 1111 0110 (反码)

+0000 0000 0000 0000 0000 0000 0000 0001

1111 1111 1111 1111 1111 1111 1111 0111 (补码)

*/

#pragma mark 练习

/*

-15 的原码/ 反码 / 补码

1000 0000 0000 0000 0000 0000 0000 1111 (原码)

1111 1111 1111 1111 1111 1111 1111 0000 (反码)

1111 1111 1111 1111 1111 1111 1111 0001 (补码)

为什么要有原码/补码/反码呢?主要是为了方便计算机计算

1.由于最高位是符号位,如果是0就代表是整数,如果是1就代表是负数

2.那么如果直接存储原码,计算机在计算的时候还需要先判断最高位才能计算,效率比较低

3.为了方便计算机计算,所以有了反码和补码,有了反码和补码之后,以后计算机就不需要判断最高位了,直接计算就可以了

1 + 1

0001

+0001

-------

0010 == 2

#pragma mark 在原码的思想上做计算 结果是错的

1 - 1 == 1 + (-1) == 计算机只会做加法

0000 0001 // 原码

+1000 0001 // 原码

----------

1000 0010 == -2

#pragma mark 在反码的思想上做计算

1 - 1 = 1 + (-1)

0000 0001 // 正1的原码(反码)

1111 1110 // 负1的反码

----------

1111 1111 == 反码

将计算出来的反码转换为原码,再将原码转换为十进制

1000 0000 == 原码 == -0

#pragma mark 在补码的思想上做计算

1 - 1 = 1 + (-1)

0000 0001 // 正1的补码

+1111 1111 // 负1的补码(是在负1的反码基础上 加上1 变成了补码)

---------

1 0000 0000 == - 0

*/

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值