整数的表示

本文探讨了无符号整数和有符号整数在32位系统中的表示,解释了C语言表达式在不同情况下的比较结果。同时,介绍了浮点数的32位表示,包括符号位、阶码和尾数,以及规格化的概念,旨在理解浮点数运算中如何保持精度。

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

无符号整数和有符号整数

当一个编码的所有二进位都用来表示数值,而没有符号位时,该编码表示的就是无符号整数,此时默认为正。
带符号整数就是必须有一个符号位。
正由于此相同位数情况下,无符号数比带符号数所能表示的范围大。(不作解释)

标准问题

在有些32位系统上,C语言表达式“-2147483648 < 2147483657” 的值为false,与事实不符。但是如果 “int i = -2147483648;” 那么“i < 2147483647”的值为true,为什么会这样?如果将表达式写成“-2147483648 - 1 < 2147483647” ,它的值又该如何?

这个问题是出现在ISO C90标准下的情况,(ISO 国际标准化组织)在该标准下,编译器会按照**int32_t, uint32_t, int64_t, uint64_t**的顺序来确定数据类型。其中它们表示的数值范围如下:

由上表可见,在编译“-2147483648 < 2147483657” 时,将-2147483648分成了两部分处理。

  • 对于ISOC90标准,首先将2147483648 = 2[^31]看成无符号整型,其机器数为0x8000 0000,然后按位取反末位加1,仍为0x8000 0000, 还是将其看成一个无符号整型,值为2147483648
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值