16/32位数,表示范围

前言

XX位二进制数,表示的数的范围是多少呢,疑惑。

一 16位数,表示范围。

16位无符号二进制数能表示2^16个数,表示范围是0~ 65535;而有符号16位二进制,有1位符号位,表示范围是-32768~+32767。

之所以是65535,是因为0也是一位,0-65535就是65536个了,即2^16

有符号就是有一位是符号位,当符号位为0时,有15位表示数,0-32767共32768个。当符号位为1时,-32768

二 32位补码表示的数,1位符号位,数的表示范围

因为十进制带符号,所以有一位符号位,数值范围是31位

最大正整数 2^32-1
最大负整数 - (2^32-1)
所以它的范围是-(2^32-1)2^32-1
2^31是它的最大位表示的数,最大整数是31位全为1,所以是2^32-1

最大正整数 2^31-1
最大负整数 - (2^31)
所以它的范围是-(2^31)2^31-1

参考资料

[1] bat67. 8位有符号数的补码表示范围. 优快云博客. 2017.
https://blog.youkuaiyun.com/bat67/article/details/75194627

### 无符号整数类型在不同位数下的取值范围 无符号整数类型(`unsigned int`)的取值范围取决于其占用的位数(bit)。由于无符号整数不包含负数,因此其最小值始终为 0,最大值则由位数决定。计算公式为: - **最小值**:0 - **最大值**:$2^n - 1$,其中 $n$ 表示位数。 以下是不同位数下的取值范围: - **8 无符号整数(`uint8_t`)**:取值范围为 0 到 255,即 $2^8 - 1$ [^1]。 - **16 无符号整数(`uint16_t`)**:取值范围为 0 到 65,535,即 $2^{16} - 1$ 。 - **32 无符号整数(`uint32_t`)**:取值范围为 0 到 4,294,967,295,即 $2^{32} - 1$ 。 这些取值范围在不同编译器和系统中保持一致,因为它们基于固定位数定义。对于实际使用中的 `unsigned int` 类型,其位数可能因平台而异,但在大多数现代系统中,32 平台上的 `unsigned int` 通常为 32 ,64 平台上的 `unsigned int` 也通常保持为 32 [^4]。 ### 示例代码:验证 8 无符号整数的取值范围 ```c #include <stdio.h> #include <stdint.h> int main() { uint8_t min = 0; uint8_t max = 255; printf("uint8_t 取值范围: %u 到 %u\n", min, max); return 0; } ``` ### 示例代码:验证 16 无符号整数的取值范围 ```c #include <stdio.h> #include <stdint.h> int main() { uint16_t min = 0; uint16_t max = 65535; printf("uint16_t 取值范围: %u 到 %u\n", min, max); return 0; } ``` ### 示例代码:验证 32 无符号整数的取值范围 ```c #include <stdio.h> #include <stdint.h> int main() { uint32_t min = 0; uint32_t max = 4294967295; printf("uint32_t 取值范围: %u 到 %u\n", min, max); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值