C 中的右移
Right shift in C
我正在尝试从文本文件中获取十六进制内存地址并移动最多 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;
}
你要的不是移位3位,而是移位3个十六进制数,每个4位。所以改为这样做:
unsigned result = addr >> 12;
>> 3
将值移动 3 位,但是您要求将 A3BC88A0
移动 3 个半字节(半字节)以导致 A3BC8
将行更改为:
unsigned result = addr >> (3*4);
(我放了 3*4
而不是 12
以突出显示您要移动的字节)。
为了清楚起见,请注意:一个十六进制数字是 4 位,也就是半个字节,这是一个 nybble(不可否认,这不是一个很常见的术语)
我正在尝试从文本文件中获取十六进制内存地址并移动最多 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;
}
你要的不是移位3位,而是移位3个十六进制数,每个4位。所以改为这样做:
unsigned result = addr >> 12;
>> 3
将值移动 3 位,但是您要求将 A3BC88A0
移动 3 个半字节(半字节)以导致 A3BC8
将行更改为:
unsigned result = addr >> (3*4);
(我放了 3*4
而不是 12
以突出显示您要移动的字节)。
为了清楚起见,请注意:一个十六进制数字是 4 位,也就是半个字节,这是一个 nybble(不可否认,这不是一个很常见的术语)