C语言中负数的补码存储(1000 0000 表示-128)

本文介绍了计算机中如何使用补码表示和存储有符号数。详细解释了正数和负数的补码计算方法,并通过具体例子说明了8位二进制数在不同范围内的表示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理

  • 正整数的补码是其二进制表示,与原码相同;
  • 求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1;

示例:负数-1, (此处,假设是8位二进制表示)
对应正数的原码:0000 0001
取反: 1111 1110
加1  : 1111 1111
最终,-1是以1111 1111的形式进行存储的。

负数-127, (此处,假设是8位二进制表示)
对应正数的原码:0111 1111
取反: 1000 0000
加1  : 1000 0001
最终,-127是以1000 0001的形式进行存储的。

关于-128:

-1补码是1111 1111再减127,即 1000 0000 表示-128的补码(8位二进制表示的最小负数)

unsigned char 范围 0 - 255
signed char 范围 -128 到 127

无符号的 0000 0000 (0)有符号数里表示 +0

无符号的 0111 1111 (127)有符号数里表示 +127

无符号的 1000 0000 (128)有符号数里表示 -128 (8位二进制表示的最小负数)

无符号的 1000 0001 (129)有符号数里表示 -127

无符号的 1111 1111 (255)有符号数里表示 -1

参考:

https://www.runoob.com/cprogramming/c-data-types.html C语言教程-数据类型

https://blog.youkuaiyun.com/u010603798/article/details/78962666 C语言中负数的存储

https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613 补码

https://www.zhihu.com/question/28685048 补码10000000为什么可以表示-128?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值