关于C ++ 20二进制补码R4的问题

Nem*_*emo 7 c++ integer twos-complement language-lawyer c++20

我正在阅读2 的补码提议的修订版4 (由C ++ 20通过),我有一些疑问。

在引言中说:

  • 维持现状的有符号整数运算遗体不可交换的一般(尽管有些实现可以保证它是)。

a + bvs中一样,这真的意味着“不可交换” b + a吗?还是应该读成“非关联”?

它还说:

  • 变化从符号到无符号转换总是明确定义的:结果是目标类型的唯一值,该值是全等整数模2 ^ N的来源。

自从开始以来,难道没有以这种方式很好地定义有符号到无符号的转换吗?那应该读为“从无符号转换为有符号”吗?

更改列表中是否还有其他遗漏或错误陈述的内容?

Bar*_*rry 2

请注意,采用的不是 P0907 - 而是P1236


或者应该读作“非关联”?

是的。

应该是“从无符号到有符号的转换”吗?

是的。如果您查看P1236R1,您可以看到规则更改为:

如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模 2 n,其中 n 是用于表示无符号类型的位数)。

如果目标类型是带符号的,则如果该值可以在目标类型中表示,则该值不会改变;否则,该值是实现定义的。

到:

否则,结果是目标类型的唯一值,该值与源整数模 2 N一致,其中 N 是目标类型的范围指数。