#include<stdio.h>
#include<conio.h>
void main()
{
int x=0x01c0ffee;
int y=x>>15+1&0xff;
clrscr();
printf("%x ",y);
getch();
}
次のコードは、ターボ c++ で ff を出力し、
7+1 を使用すると 15+1 の代わりに同じ答え ff を返します。
それで、ターボ c++ は x>> 8 と x>>16 をヘキサで同じと見なしますか?
コードをデバッグするには、出力を個々の操作に分割することをお勧めしますが、変数に十分なスペースがあることも確認してください。
#include<stdio.h>
void main()
{
int x = 0x01c0ffee;
int y = x >> 15 + 1 & 0xff;
printf("Size: %d\n", sizeof(int));
printf("1.) %x\n", x);
printf("2.) %x\n", x >> 15);
printf("3.) %x\n", x >> 15 + 1);
printf("4.) %x\n", x >> 15 + 1 & 0xFF);
printf("Final: %x\n",y);
}
の出力にSize:
は、 のバイト数が表示されますint
。16 進数の 2 桁ごとに 1 バイトが必要です。
これが私の 32 ビット マシンでの出力です。
Size: 4
1.) 1c0ffee
2.) 381
3.) 1c0
4.) c0
Final: c0
が表示された場合はSize: 2
、問題があります。を使ってみてくださいlong int
。また、変数unsigned
の右シフトの動作signed
は実装固有であるため、シフト操作を実行している場合は使用することをお勧めします (つまり、Turbo C は gcc とは異なる動作をする可能性があります)。