【发布时间】:2023-03-03 02:15:01
【问题描述】:
是否可以通过显式转换(例如,int32_t 到 uint32_t)来更改值的位表示?
例如,假设我有以下联合:
typedef union {
int32_t signed_val;
uint32_t unsigned_val;
} signed_unsigned_t;
规范是否保证这些代码段具有相同的行为?
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
return (uint32_t) input;
}
和
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
signed_unsigned_t converter;
converter.signed_val = input;
return converter.unsigned_val;
}
我在这里考虑 C99。我见过一些类似的问题,但他们似乎都在讨论 C++,而不是 C。
【问题讨论】:
-
我怀疑在某些假设情况下可能存在差异,例如在执行 1 补码运算的机器上操作。
标签: c c99 language-lawyer