打印

C语言中数据类型数值范围的问题?

[复制链接]
1366|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myic200610|  楼主 | 2012-2-23 00:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 myic200610 于 2012-2-23 00:58 编辑

C语言中:

char 类型数据数值范围是:-2^7~2^7-1,即-128~127;

unsigned char 类型数据数值范围是:0~2^8-1,即0~255;


signed int 类型数据数值范围是:-2^31~2^31-1,即-2147483648~2147483647;

unsigned int 类型数据数值范围是:0~2^32-1,即0~4294967295。

等等。


我的问题是:char 类型数据数值范围的最小值为什么是-2^7-128),而不是-2^7-1-129)或-2^7+1-127)呢?

我的理解是这样的:

Char类型数据的范围用二进制表示为:

1 111 1111~0 111 1111

其中:

1 111 1111B=-127D

0 111 1111B=127D;

因此,我觉得char 类型数据数值范围的最小值应该是-2^7+1-127),对应的char 类型数据数值范围就应该是是:-2^7+1~2^7-1,即-127~127


请高手指点,我的分析错误在哪里?



谢谢!


相关帖子

沙发
王紫豪| | 2012-2-23 01:12 | 只看该作者
楼主看看补码的定义就知道了, 1 111 1111B 不是最小的,而是最大的负数,最小的应该是 1 000 0000 = -128,为啥正负不对称呢,就是因为没有 ±0

使用特权

评论回复
板凳
myic200610|  楼主 | 2012-2-23 01:25 | 只看该作者
本帖最后由 myic200610 于 2012-2-23 01:27 编辑

大侠还没休息呀!
谢谢!研究下补码!

并请教:
你说的没有±0,我的理解是没有-0,只有+0,对吗?

使用特权

评论回复
地板
yewuyi| | 2012-2-23 09:16 | 只看该作者
楼主看看补码的定义就知道了, 1 111 1111B 不是最小的,而是最大的负数,最小的应该是 1 000 0000 = -128,为啥正负不对称呢,就是因为没有 ±0
王紫豪 发表于 2012-2-23 01:12


从数学的理论看,不是没有±0,而是+0=-0,如同一个硬币的正反两面,但用一个硬币表示。

LZ确实是要去看看补码的定义,仔细看看就应该明白了,还不明白的话,就改行从政吧。:lol

使用特权

评论回复
5
yewuyi| | 2012-2-23 09:18 | 只看该作者
在C语言中,
signed int 类型数据数值范围是:-2^31~2^31-1,即-2147483648~2147483647;
unsigned int 类型数据数值范围是:0~2^32-1,即0~4294967295。


这个与通常的C语言规定也不太符合,一般是2^15

使用特权

评论回复
6
myic200610|  楼主 | 2012-2-24 00:05 | 只看该作者
谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:MyLovelyBaby! INTERNET将影响每个人, 21IC将影响每位电子工程师!

536

主题

2587

帖子

4

粉丝