C中的右移

时间:2015-10-11 22:50:46

标签: c bit-shift

我试图从文本文件中获取十六进制内存地址,并移动最多3位,然后打印结果。 内存地址是A3BC88A0,我只想打印A3BC8?但是,当我运行代码时,addr = A3BC88AO但结果= 14779114.有人可以帮我弄清楚为什么会发生这种情况或做什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char * argv[])
{
    FILE *f;
    myfile = fopen("Test.txt", "r");
    unsigned addr;
    fscanf(f, "%x", &addr);
    printf("%x\n",addr);
    unsigned result = addr >> 3;
    printf("%x\n",result);
    fclose(myfile);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

你想要的不是移位3位,而是移位3个十六进制数字,每个数字都是4位。所以这样做:

unsigned result = addr >> 12;

答案 1 :(得分:2)

>> 3将值移位3位,但是您要求A3BC88A0移位3 nybbles(半字节)以产生A3BC8

将行更改为:

unsigned result = addr >> (3*4);

(我把3*4而不只是12来突出显示你想要转移的nybbles。

为清晰起见,注意:单个十六进制数字是4位,这是一个半字节,这是一个nybble(不是一个非常常见的术语)