假设我有以下C代码.
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)
什么隐式转换在这里怎么回事,这是代码为安全的所有值u
和i
?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)
是否有可能的,比方说,一个显式类型转换int32_t
到uint32_t
,改变值的位表示?
例如,鉴于我有以下联合:
typedef union {
int32_t signed_val;
uint32_t unsigned_val;
} signed_unsigned_t;
Run Code Online (Sandbox Code Playgroud)
规范保证这些代码段是否具有相同的行为?
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
return (uint32_t) input;
}
Run Code Online (Sandbox Code Playgroud)
和
uint32_t reinterpret_signed_as_unsigned(int32_t input) {
signed_unsigned_t converter;
converter.signed_val = input;
return converter.unsigned_val;
}
Run Code Online (Sandbox Code Playgroud)
我在这里考虑C99.我已经看到了一些类似的问题,但他们似乎都在讨论C++,不C.