gpt4 book ai didi

c - 是否在 C 中移动带符号短未定义行为的带符号位?

转载 作者:太空狗 更新时间:2023-10-29 15:25:26 26 4
gpt4 key购买 nike

我听说移入整数的有符号位,即

int test = INT_MAX;
test = (test<<1) + 1;

是未定义的行为,因为测试大于 INT_MAX。但是在带符号的短变量中会遇到这种行为吗,即

short test1 = SHRT_MAX;
test1 = (test1<<1) + 1;

?

目前我还没有找到任何相关文档。

编辑:我知道未定义的行为会导致整数的情况,但不会很短。

最佳答案

当大多数类型的表达式中使用小整数类型时,它是promotedint(如果 int 可以适合原始类型的所有值),然后在 int 上执行表达式。

这给出了两种可能性:

  1. intshort 大小相同的平台上,移位将是未定义的行为,因为它转移到 int 的符号位。 (更准确地说,原因是结果不能表示为 int)。参见 C11 6.5.7p4 .
  2. int 的位数多于 short 的平台上,移位本身会成功(尽管如果移位超过 1,它可能是未定义的) .但是,当您将结果分配回 short 变量时,该值将无法表示为 short。将分配的实际值是实现定义的。参见 C11 6.3.1.3p3 .

关于c - 是否在 C 中移动带符号短未定义行为的带符号位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53746248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com