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

标签 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>> 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 变量的右移行为是特定于实现的(这意味着 Turbo C 可能会采取不同的行为来自海合会)

关于c - turbo c++ 中十六进制的右移运​​算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18452113/

相关文章:

c - 我无法声明一个非常基本的函数

c - Shellcode C 程序线束

c++ - 使用 SIMD 指令平滑样条

pandas - 如何在 tensorflow/keras 中移动像 pandas.shift 这样的张量? (无需将最后一行移到第一行,如 tf.roll)

c - 使用ffmpeg重新编码

c++ - 如何显示十六进制数据而不是文本?

haskell - Haskell 中 float 的十六进制表示

java - 将 FileInputStream 转换为返回十六进制的流

r - data.table:如何按组指示唯一列值的第一次出现

arm - 反转寄存器 Thumb-2 中的位