#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上是相同的,类似的?
最佳答案
为了调试代码,我建议将输出分解为单独的操作,同时还要检查变量中是否有足够的空间。
#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
变量上的右移位行为是特定于实现的(这意味着turboc的行为可能与gcc不同)关于c - Turbo C++中十六进制的右移运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18452113/