当源值不能在目标类型中表示时将整数转换为有符号类型是根据cppreference
- 实现定义(C++20 前)
- 目标类型的唯一值等于源值模 2^n ,其中 n 是用于表示目标类型的位数 (C++20 起)
同样在GCC实现定义的行为中指定,有
为了转换为宽度为 N 的类型,该值以2^N为模减少到该类型的范围内;没有发出信号。
我想有人说同样的话。我的问题是减少/模数的结果是否仍然可能超出目标签名类型的范围?说signed char c = 255
,255 模 2^8 仍然是 255,不变。这个模数结果如何适合目标类型?
此答案显示了一种首先反转值并加 1,然后添加有符号位的方法。我不确定这是否是实际所做的。
解释强调部分的正确/标准方法是什么?