2
#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 をヘキサで同じと見なしますか?

4

1 に答える 1

1

コードをデバッグするには、出力を個々の操作に分割することをお勧めしますが、変数に十分なスペースがあることも確認してください。

#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 とは異なる動作をする可能性があります)。

于 2013-08-26T20:41:37.677 に答える