2

例えば:

#include <stdio.h>

int main(void){
    unsigned int x = 64;
    x += 1023;

    unsigned char y = x;

    printf("%u\n", y);
    return 0;
}

変数は私のマシンyの値を保持します。C99 標準は、 unsigned intがunsigned charに変換63されるときに最下位バイトが格納されることを保証しますか?それとも、マシンのエンディアンが変換に影響しますか?

4

2 に答える 2

4

標準では、符号なし型への変換について次のように述べられています。

整数型の値が _Bool 以外の別の整数型に変換される場合、その値が新しい型で表現できる場合、その値は変更されません。

それ以外の場合、新しい型が符号なしの場合、値が新しい型の範囲内になるまで、新しい型で表現できる最大値よりも 1 多い値を繰り返し加算または減算することによって、値が変換されます。

これは、値が収まらない場合に値がラップアラウンドするという素晴らしい言い方です。したがって、あなたの場合、実際に 255 を超えて保存できない限り、すべてのマシンで常に 63 を取得します。エンディアンとは関係ありません。unsigned char

于 2013-03-27T21:27:56.750 に答える
0

エンディアンはキャストにとって重要ではありません。C 値のみが重要です。

于 2013-03-27T21:28:31.703 に答える