[英]Assigning an out-of-range integer to a signed char type
signed char a = 128;
假设一个字节是 8 位,这是未定义的吗?
我所知道的是,将超出范围的值分配给有符号类型是未定义的,但 Bjarne Stroustrup 在 C++ 编程语言中说,如果我将 integer 255 分配给 8 位字节机器上的 char 符号,其中 char 已签名结果是-1。
signed char a = 128;
假设一个字节是 8 位,这是未定义的吗?
我所知道的是,将超出范围的值分配给有符号类型是未定义的,但是 Bjarne Stroustrup 在 C++ 编程语言中说,如果我将整数 255 分配给 8 位字节机器上的一个字符,其中一个字符是有符号的结果是-1。
默认情况下,在 C 和 C++ 中,上溢/下溢操作的结果是UNDEFINED 。 如果您溢出/下溢签名变量类型是 obsecure 会发生什么,这意味着它可以被环绕(许多编译器都假设它)或者可能转储核心或终止程序等。
但是编译器开发人员通常不严格遵守这个定义,并且通常围绕这些内置类型
这是 C++ 编程语言第 4 版 Bjarne Stroustrup(第 259 页)中的一部分
void f()
{
int i = 1;
while (0 < i) ++i;
cout << "i has become negative!" << i << '\n';
}
//This will (eventually) try to increase i past the largest integer. What happens then is undefined, but
//typically the value ‘‘wraps around’’ to a negative number (on my machine −2147483648).
这是gnu所说的
此外,将超出范围的值转换为带符号的 integer 类型时,可能会发生溢出。 在这里,标准实现必须定义会发生什么,但这可能包括引发异常。 实际上,在这种情况下,所有已知的实现都支持静默环绕,因此您不必担心其他可能性。 块引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.