2017-10-27 6 views
-3
#include<stdio.h> 
int main() 
{ 
    unsigned char c =292; 
    printf("%d\n",c); 
    return 0; 
} 

次のコードは、出力 "36"を示しています。 これがなぜ起こるのか知りたいのですが?unsigned charに255より大きい整数を代入すると、異なる出力が得られます。なぜですか?

+1

292は大きいためです。 – tkausl

+0

追加のヒントについては、警告でコンパイルしてください。 – user2864740

+2

システム上で 'UCHAR_MAX'を表示します –

答えて

1

文字のサイズを ただし、ここでの初期化は255を超えています(つまり、c = 292> 255)。

したがって、cは292-255番目の値(つまり37番目の値)を格納します。値cストアは36です(0が最初の値なので)。

それはあなたがC = 36

を初期化し、最終的には、printfの()FUNCたことを意味します。メモリから値をフェッチして値36を出力します。

4

292がunsigned charの変数に収まらないためです。

#include <stdio.h> 
#include <limits.h> 
int main() 
{ 
    unsigned char c =292; 
    printf("%d %d\n", c, UCHAR_MAX); 
    return 0; 
} 

と出力チェック:

は、私はあなたがこのプログラムをコンパイルすることをお勧め

prog.c: In function 'main': 
prog.c:5:21: warning: unsigned conversion from 'int' to 'unsigned char' changes value from '292' to '36' [-Woverflow] 
    unsigned char c =292; 
        ^~~ 
36 255 

だから、私のシステムではUCHAR_MAXである255を、そしてそれはあなたが割り当てることが許可されている最大値です〜c

292だけcをオーバーフローし、そしてそれは符号なしの型だから、それは、0から255まで行くので、それはあなたに292与えて、ラップアラウンド - (+ 1 255)= 36

+2

私はあなたが '292 - (255 + 1)'を意味すると思います。 –

+0

ありがとうございます@AjayBrahmakshatriya! – gsamaras

関連する問題