#include<stdio.h>
int main()
{
unsigned char c =292;
printf("%d\n",c);
return 0;
}
次のコードは、出力 "36"を示しています。 これがなぜ起こるのか知りたいのですが?unsigned charに255より大きい整数を代入すると、異なる出力が得られます。なぜですか?
#include<stdio.h>
int main()
{
unsigned char c =292;
printf("%d\n",c);
return 0;
}
次のコードは、出力 "36"を示しています。 これがなぜ起こるのか知りたいのですが?unsigned charに255より大きい整数を代入すると、異なる出力が得られます。なぜですか?
文字のサイズを ただし、ここでの初期化は255を超えています(つまり、c = 292> 255)。
したがって、cは292-255番目の値(つまり37番目の値)を格納します。値cストアは36です(0が最初の値なので)。
それはあなたがC = 36
を初期化し、最終的には、printfの()FUNCたことを意味します。メモリから値をフェッチして値36を出力します。
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
私はあなたが '292 - (255 + 1)'を意味すると思います。 –
ありがとうございます@AjayBrahmakshatriya! – gsamaras
292は大きいためです。 – tkausl
追加のヒントについては、警告でコンパイルしてください。 – user2864740
システム上で 'UCHAR_MAX'を表示します –