0

どのプラットフォームでも、このコード プリントの値が常に 0 から 15 であることが保証されていますか?

#include <stdio.h>

typedef struct UI4{
    unsigned value: 4;
} ui4;

int main(void)
{
    ui4 u;

    u.value = 0;
    while (1) {
        printf("%u\n", u.value++);
    }
    return 0;
}
4

2 に答える 2

4

はい、符号なし整数オーバーフローは、標準によって「ラップアラウンド」することが保証されています。

于 2012-10-19T05:06:37.157 に答える
2

理論的には、いくつかの本当に奇妙なアーキテクチャでは異なる結果が得られると思います(BCDベースのコンピューター)? しかし、その場合、準拠した実装ではない可能性があります。現実的には、0 から 15 までの 4 ビットを取得する必要があります。ただし、わざとオーバーフローしないでください。

于 2012-10-19T05:55:57.217 に答える