有符号和无符号char的简易计算和浮点型在内存中的存贮规则

本文深入探讨了C++中有符号char和无符号char的取值范围,以及它们之间的转换规则,强调了数值在类型间的循环性质。同时,讲解了浮点型在内存中的存储方式,指出以整型方式存储和提取浮点数可能导致的误差。文中还提到了整型提升和在比较运算中的类型转化规则,以及在编程实践中需要注意的细节。

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

有符号的char和无符号char的取值范围

首先char 和 unsigned char 的都是占用一个字节空间大小的,8个bit位
所以char的取值范围是在-128——127
unsigned char 的范围是在0——255
注意:无论你放什么数据,它只要放在char 和unsigned char 里面他的取值一定是上面的。
然后他的取值是循环的
例如你将 128放在char里面 实际上值是-128 129放里面值是-127
你将-129放在插入里面,值是127 -130放里面值是126.

在这里插入图片描述
同理 unsigned char 也是一样的
自己可以敲代码理解感受一下。黑体字很关键。
这样可以避免复杂的截断,整型提升。

但是有一个前提,一定是%d有符号十进制打印

习题讲解

在这里插入图片描述
a,b的值是-1,char里面放的下。
而-1放在unsigned char 里面 就相当与从0向后走一下,取值是255.
在这里插入图片描述
这个题是%u无符号打印。所以要截断和整型提升这一系列的操作。
简单的说说整型提升:其实很简单,有符号位的数补符号位,无符号的直接补0;
在这里插入图片描述
在这里插入图片描述
当一个有符号数和无符号数进行比较(strlen 和sizeof)运算的时候,有符号数一定要转化为无符号数
如何转化? 就是拿个有符号数的补码直接转化.计算的时候直接用补码计算。

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/66b439ec7d714bce846cdc9a1eaa7c4f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5oiR6L275o-P5reh5YaZ5ZOI,size_20,color_FFFFFF,t_70,g_se,x_16
在这里插入图片描述
无符号数恒大于0 显然死循环。不多说了。然后从最大数(32个bit位都是1)到到0死循环
在这里插入图片描述

浮点型的存储方式

在这里插入图片描述
这个题告诉我们以整型的方式存储,用整型的方式拿出来正确,用浮点型拿出来错误
浮点 浮点 整型
这个具体的存储方式较为复杂,不要求掌握。但我还是写一下吧。

在这里插入图片描述
两种特殊情况
E为全0 值为0
E为全1 值为无穷大
在这里插入图片描述

有符号无符号数在内存中存放方式略有不同。 对于无符号数(如 `unsigned char`、`unsigned int` 等),它们的二进制表示直接对应了它们的,例如 `0x01` 表示十进制的 1,`0xFF` 表示十进制的 255。因此,无符号数在内存中的存放方式与它们的二进制表示一致。 例如,对于一个 `unsigned char` 类型的变量,它会占用一个字节(8 比特)的内存空间,其中的每一位都对应了一个二进制位。例如,二进制数 `0000 0001` 对应了十进制数 1,二进制数 `1111 1111` 对应了十进制数 255。因此,无符号数在内存中的存放方式就是直接将对应的二进制数存储到内存中。 对于有符号数(如 `char`、`int` 等),它们的二进制表示包含了符号位,即最高位为符号位,0 表示正数,1 表示负数。例如,二进制数 `1000 0000` 表示的是 -128(在大多数机器上),而不是 128。因此,在内存中存储有符号数时,需要先将其转换为补码再进行存储。 例如,对于一个 `char` 类型的变量,它同样占用一个字节的内存空间,其中的第 8 位为符号位,而第 1 到第 7 位表示该数字的绝对。例如,十进制数 -1 在内存中的表示为原码 `1000 0001`,反码 `1111 1110`,补码 `1111 1111`。因此,-1 在内存中的存放方式就是将其补码 `1111 1111` 存储到内存中。 需要注意的是,在进行有符号无符号数之间的类型转换时,需要非常小心,否则可能会导致意想不到的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

通过全部用例

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

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

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

打赏作者

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

抵扣说明:

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

余额充值