turbo c ++中十六进制的右移运​​算符

时间:2013-08-26 20:02:45

标签: c hex shift turbo-c++

#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&gt;&gt;在hexa上8和x>&gt; 16相同,类似的东西?

1 个答案:

答案 0 :(得分: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,因为signed变量上的右移行为是特定于实现的(这意味着Turbo C可能与gcc不同)