0
#include<stdio.h>

int main()
{
    char a = 128;
    char b = -128;
    printf("a is %d -- b is %d \n",a,b);

    return 0;
}

出力は次のとおりです。

a is -128 -- b is -128

符号付き文字の範囲は 0 ~ 127 であるため、上記のコードから、境界外の値に値がどのように割り当てられるかを説明してください。

前もって感謝します。

4

1 に答える 1

4

型の範囲はchar実装によって異なります。符号付きタイプの場合、その範囲は少なくとも -128 から 127 であり、符号なしタイプの場合、その範囲は少なくとも 0 から 255 です (これらは、タイプが最低限サポートしなければならない範囲です。タイプによってサポートされる範囲は、実装によっては実際にはこれよりも大きい場合があります)。

また、その値を保持できない符号付きの型に整数を代入すると、未定義の動作が呼び出されることに注意してください。そのため、128 を保持できない signed char に 128 を代入すると (たとえば、128 が より大きい場合CHAR_MAX)、未定義の動作が呼び出されます。この場合、-128128 を保持する unsigned char 型と同じバイト表現を共有しているため、ラップアラウンドしていますが、未定義の動作のすべてのインスタンスと同様に、すべての実装でこれが当てはまるとは保証できません。

于 2012-05-02T04:56:54.550 に答える