[牛人杂谈]

C语言为什么浮点型没有无符号类型

[复制链接]
1342|7
手机看帖
扫描二维码
随时随地手机跟帖
玛尼玛尼哄|  楼主 | 2019-2-24 17:29 | 显示全部楼层 |阅读模式
刚才看了一个贴,受到启发,然后查了这个问题。找到答案了

玛尼玛尼哄|  楼主 | 2019-2-24 17:31 | 显示全部楼层
我们使用int型的时候有unsigned(无符号)和signed(默认:有符号)的类型,但为什么float其他以上的都没有这些你知道吗?
我们先说明下一个无符号整型和有符号整型的区别.写个程序来看看。
76055c7264212d5f9.png
我们直接使用库来写,他在里面定义了signed和unsigned的最大值和最小值。unsigned只有最大值,最小值就是0.
923575c72643a4dcd7.png
从图中可以看出signed int 的表示范围为:-2147483648 ~ 2147483647 (最高位做符号位)。unsigned int 的表示范围为:0 ~ 4294967295 (不保留符号位)
355275c7264544a129.png
那么为什么float会没有无符号呢?我们可以从上面看出,无符号和有符号的区别,整型是采用二进制的。而浮点数却是按照 整数部分,小数部分,指数部分存放的。运算也是分开来运算的。所以unsigned无法作用于float,所以定义无符号的浮点型会出错。
950425c726469326af.png
这样就可以知道,符号是占用了一个比特位的。所以,一般来说,同类型的signed能够存储的数的绝对值大小是要小于undigned的。
210815c72647fd990d.png

使用特权

评论回复
玛尼玛尼哄|  楼主 | 2019-2-24 17:32 | 显示全部楼层
在C语言中,计算的时候会类型提升,如果降低会警告,或者无符号类型的值给比这个类型小的有符号类型的值的时候,编译的时候就会警告了。
748305c72649a62201.png
当然,这并不是错误,只是告诉你把大的值给小的值可能会数据丢失。所以最好避免这样的错误。顺便推荐下在windows使用gcc的安装工具是MinGW。

使用特权

评论回复
yiy| | 2019-2-25 21:40 | 显示全部楼层
难怪我没听说过

使用特权

评论回复
heisexingqisi| | 2019-2-26 17:47 | 显示全部楼层
是没见过这种应用。

使用特权

评论回复
gejigeji521| | 2019-2-26 20:41 | 显示全部楼层
有深度的。

使用特权

评论回复
zhuotuzi| | 2019-2-28 22:06 | 显示全部楼层
编译器或者c语言本身规定的吧

使用特权

评论回复
antusheng| | 2019-3-2 22:16 | 显示全部楼层
研究透。

使用特权

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

本版积分规则

156

主题

3005

帖子

2

粉丝