gpt4 book ai didi

c - 搜索二进制数

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:28 25 4
gpt4 key购买 nike

我已经定义了一些值,见下文,但我无法正确使用它们。

#define add 000001
#define sub 000010
#define jmp 000111

#define IMM 10000
#define ADDR 10001

在我的代码中,我设置了一个十六进制地址。

            parameter1 = false;
parameter1 = false;

uint64_t data = 0xffffffff05001e00;

uint16_t vector[4];
memcpy(vector, &data, sizeof(uint64_t));

int currentPosition = 0;

while (currentPosition < 4) {

header = vector[currentPosition];//header

opcode = header >> 0xA & 0x3F;
src1 = header >> 0x5 & 0x1F;
src2 = header & 0x1F;

if (src1 == ADDR || src1 == IMM) { parameter1 = true; }
if (src2 == ADDR || src2 == IMM) { parameter2 = true; }
....
currentPosition++;
}

header = 1e00 在这种情况下(因为它是 vector[0] )

转发它会做:操作码 = 0x7,src1 = 0x10,src2 = 0x0。

二进制表示:000111 10000 00000 -> jmp IMM NULL

当第一次if被调用时,parameter1应该得到值true;但这从未发生过。为什么会这样?我没有正确定义 IMM 值?

谢谢!!!

最佳答案

你定义的数字都不是二进制数

#define add 000001      // octal literals because it starts with 0
#define sub 000010
#define jmp 000111

#define IMM 10000 // decimal literals
#define ADDR 10001

它们都不是您在代码中假设的二进制表示。

从 C++14 开始,您可以将二进制文字写为(来自 https://en.cppreference.com/w/cpp/language/integer_literal 的示例):

int b = 0b101010; // C++14

一般来说,我会强烈建议您不要使用 #define,除非您故意选择解决使用宏带来的所有麻烦。

关于c - 搜索二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com