【发布时间】:2019-03-17 16:50:21
【问题描述】:
union Positive_Small {
int8_t s;
uint8_t u;
};
union Positive_Small x = {.s = 3};
union Positive_Small y = {.u = 4};
assert(x.u == 3);
assert(y.s == 4);
这是定义的行为吗? 标准是否保证有符号整数类型的正范围与其无符号等效项具有相同的表示形式?
我想没有足够疯狂的实现(也许是 DS9K?)不这样做,但它是否已定义?
【问题讨论】:
-
在某些平台上,使用偏移二进制表示(例如,对于 16 位,位模式 x0000、0x8000 和 0xFFFF 将分别表示 -32768、0 和 +32767)可以提供显着的性能比较繁重的代码的优势。标准不允许,但如果是的话,它几乎不会是 DS9K。
标签: c language-lawyer unsigned signed type-punning