2
#include<stdio.h>
#include<conio.h>
void main()
{
int x=0x01c0ffee;
int y=x>>15+1&0xff;
clrscr();
printf("%x  ",y);
getch();
}

以下代码在 turbo c++ 中打印 ff,而不是 15+1,如果我们使用
7+1 返回相同的答案 ff。
那么,turbo c++ 是否认为 x>> 8 和 x>>16 在 hexa 上是相同的,类似的东西?

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。每两个十六进制数字需要一个字节。

这是我的 32 位机器上的输出:

Size: 4
1.) 1c0ffee
2.) 381
3.) 1c0
4.) c0
Final: c0

如果你看到Size: 2了,那你的问题就来了。尝试使用long int. 另外,如果您正在执行移位操作,我建议您使用,因为对变量unsigned的右移行为是特定于实现的(这意味着 Turbo C 的行为可能与 gcc 不同)signed

于 2013-08-26T20:41:37.677 回答