环状存储机制

正数的原反补码相同

例如24的二进制原码为0001 1000  反码0001 1000  补码0001 1000

负数的原码符号位为1,其余位与正数一致

例如-24的原码为 1001 1000 反码符号位不变其余位取反  反码1110 0111

补码为反码加一 即补码为1110 1000

在内存中数据是以补码的形式储存以保证数据的连续性以及空间的充分利用,以字符型为例,

若是无符号字符型则数据0~255共有256个数据,假设内存空间以原码储存则有符号字符型数据为

-127~127共有255个数据少了一个数据,0的二进制码为0000 0000那缺失的那一个数据则为-0即1000 0000,这是不合理的,1000 0001~1111 1111即-1~-127,我们发现1000 0000这个二进制没有被利用上。

于是我们用补码储存数据,定义补码1000 0000为-128,而-1以1111 1111这个补码存储,0的补码为0000 0000,0-1 = 1111 1111,而127 = 0111 1111,127 +1 = 0111 1111 + 0000 0001 =1000 0000 = -128 实现了环状存储。

那么做一个题             int a = - 24的十六进制是什么

我们首先来想 -1的二进制补码是三十二个1 转换为十六进制为 0xffff ffff 在其基础上再减去十六进制的 23 即0xffff ffff - 0x0000 0017 = 0xffff ffe8,即-24的十六进制为0xffff ffe8

再遇到这类题目可直接先想出-1的二进制补码,将其转换为十六机制,再在原来整数的基础上减去1,再求出其正数的十六进制数,用负一的十六进制减去后面的十六进制就是题目答案;

        标准解释:在计算机系统中,数值一律用补码来表示和存储。原因在于,是用补码,可以将符号位和数据域统一处理;

        同时,加法和减法也可以统一处理(cpu只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的程宏飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值