【问题标题】:Questions about C++20 two's-complement proposal R4关于 C++20 补码提案 R4 的问题
【发布时间】:2019-09-20 16:36:07
【问题描述】:

我正在阅读the two's-complement proposal 的修订版 4(由 C++20 采用),我有一些问题。

在介绍中,它说:

  • 现状有符号整数算术通常保持不可交换(尽管某些实现可能保证它是)。

它真的意味着“不可交换”吗,例如 a + bb + a?还是应该读作“非关联”?

它还说:

  • 更改从有符号到无符号的转换始终是明确定义的:结果是目标类型的唯一值,它与源整数模 2^N 一致。

有符号到无符号的转换不是从一开始就以这种方式明确定义的吗?应该读作“从无符号转换为有符号”吗?

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

【问题讨论】:

  • 我投票结束这个问题作为离题,因为这个问题不太可能对所讨论论文的特定作者之外的任何人有帮助,而且即使那样也没有,因为设计已经被采用P1236 进入 C++20。
  • 就像是一样,它应该是非关联的,并且更改为未签名到签名。
  • 这只是两个错别字......有时我们不得不接受人类会犯错误

标签: c++ integer language-lawyer twos-complement c++20


【解决方案1】:

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


还是应该读作“非关联”?

是的。

应该读作“从无符号转换为有符号”吗?

是的。如果你查看P1236R1,你可以看到规则从:

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

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

到:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多