相关疑难解决方法(0)

签署C中的无符号转换 - 它总是安全吗?

假设我有以下C代码.

unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;
Run Code Online (Sandbox Code Playgroud)

什么隐式转换在这里怎么回事,这是代码为安全的所有值ui?(安全,从某种意义上说,即使此示例中的结果会溢出到某个巨大的正数,我也可以将其转换回int并获得真实的结果.)

c type-conversion

127
推荐指数
3
解决办法
16万
查看次数

UINT_MAX + 1等于什么?

C中定义的行为是UINT_MAX + 1u什么?假设它为零是多么安全?

c standards portability

12
推荐指数
3
解决办法
8672
查看次数

在编译为unsigned时,C编译器是否可以更改位表示?

是否有可能的,比方说,一个显式类型转换int32_tuint32_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.

c c99 language-lawyer

8
推荐指数
1
解决办法
704
查看次数