|
どうしても理解できなかったので質問いたします。
文字「N」の16進表示「4e」を「e4」にするプログ
ラムを以下のように作成したのですが、実行結果が
ffffffe4
となってしまいます。変数の宣言時に「unsigned」
をつければ正常な実行結果
e4
が表示されます。
「b = a << 4」の時の「b」の値が
ffffffe0
となっていることは判明したのですが、どうして左
シフトでこのような結果になってしまうのかが理解
できません。どなたか教えて頂けませんでしょうか。
右シフトすると空いたところに符号(1 or 0)が入る
算術シフトと何か関係があるのでしょうか。
#include<stdio.h>
int main(void)
{
char a = 'N',b,c;
b = a<<4;
c = a>>4;
a = b + c;
printf("%x\n",a);
return(0);
}
|