首页 > 解决方案 > 将超出范围的整数分配给带符号的 char 类型

问题描述

signed char a = 128;
假设一个字节是 8 位,这是未定义的吗?
我所知道的是,将超出范围的值分配给有符号类型是未定义的,但 Bjarne Stroustrup 在 C++ 编程语言中说,如果我将整数 255 分配给 8 位字节机器上的 char,其中 char 已签名结果是-1。

标签: c++type-conversion

解决方案


这是未定义的吗?

不。

我所知道的是,将超出范围的值分配给有符号类型是未定义的

也没有。

支配这一点的规则是整数类型之间的转换。转换是用于初始化还是赋值无关紧要。

将整数值转换为有符号整数类型时,如果结果不可表示,则:

当前标准 C++17 中:结果值将由实现定义。

即将发布的标准 C++20 中:该值将与原始值模 2 N一致,其中 N 是目标类型的宽度(就像无符号整数一样)。-1 与 255 模 2 8一致。


请注意,与转换不同,有符号算术溢出的行为是未定义的。


推荐阅读