C++ 数据类型,有符号类型在计算机中的存储

本文深入探讨了C++中char类型的表示范围,解释了-128至127之间的数值如何存储。通过分析二进制表示,展示了有符号char类型如何使用最高位作为符号位,并介绍了正数和负数的补码、反码和原码概念。

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

C++ 数据类型

字符类型没啥好说的,这里引用菜鸟教程-数据类型,针对char类型理解数据在计算机中实际存储方式
数据类型

char类型为什么表示范围是-128 到127之间

我们知道一个字节有八位,那么一个字节能表示2 的8次方的数据
0000 0000
0000 0001


1111 1110
1111 1111

对于有符号的char类型,每个字符的首位表示该字符的符号0表示正,1表示负
对于127 二进制表示为0111 1111
当执行127 + 1 时得到二进制 1000 0000(十进制-0)
本应该是128 ,却得到了负0,为了避免这种歧义,规定1000 0000为-128,并且-128的补码也是1000 0000 但反码是1111 1111

除此以外,计算机中存储数据是存该数据的补码,那么:
正数的补码.反码.原码都一致
负数的补码=反码+1
负数的反码是除了首位符号位不变的基础下,其余所有位数取反

源码补码数据
0000 00000000 00000
0000 00010000 00011
0111 11110111 1111127
1000 00001000 0000-128
1000 00011111 1111-1
1111 11101000 0010-126
1111 11111000 0001-127

根据上述表格,会发现这种表示方法可以吧减法用加法来表示
比如要计算127-126
计算机中所有加法都是有补码进行的,只需要用127和负126的补码进行逻辑加法。
0111 1111
+
1000 0010
——————
0000 0001 ---->正好是1
计算两个负数相加 -1-2
1111 1111
+
1111 1110
——————
1111 1101(高位舍弃,得到-3的补码)
将-3的补码 转化成原码
首先 补码=反码+1—>那么 反码=补码-1—>反码=补码+(-1)—>反码=补码+1111 1111
前面我们说到计算机减法也是通过加 负数的补码来实现的
-3的反码:
1111 1101
+
1111 1111
——————
1111 1100 —>得到反码
反码转换成原码
1000 0011 = -3
由此得到-1-2=-3

注意
计算机加法运算时不会计算符号位.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值