数值是否直接以比特形式被计算机表示与存储?
无符号整数的数值和二进制存储映射规则
首先明确结论:在你的整数取值符合当前无符号整数类型的合法范围的前提下,数值和二进制存储是直接一一映射的,但你提到的0b10000000的结果仅对应8位无符号整数的场景。
具体的规则可以拆分说明:
- 如果你用的是8位无符号整数类型(常见命名为
uint8_t,取值范围为0~255)存储128,那计算机实际存储的二进制值确实是0b10000000。无符号整数的编码规则在绝大多数编程语言、主流CPU架构中都是统一的:直接将十进制数值转换为等值的二进制数,没有符号位、偏移量等额外转换逻辑,只要值在类型的取值范围内,映射关系完全确定。 - 如果你用的位宽更大的无符号整数类型存储128,比如16位无符号整数
uint16_t,实际存储的二进制值会是0b0000000010000000,只是高位补0,核心的数值对应逻辑没有变化,只是存储的位宽更长。 - 如果你的128超出了当前无符号类型的取值范围,比如用不存在的7位无符号整数(范围0~127)存储128,就会发生溢出,最终存储的二进制值就不符合预期的映射关系,这类行为在部分编程语言中是未定义行为,需要额外注意。
额外补充:这个映射规则仅适用于无符号整数,有符号整数因为要处理负数,会采用补码等编码规则,和直接二进制映射有差异,不要混淆两类类型的编码逻辑。
内容的提问来源于stack exchange,提问作者Finlay Weber
相关产品推荐
相关产品推荐

