gpt4 book ai didi

c - 显式转换问题,C

转载 作者:行者123 更新时间:2023-12-03 23:47:22 26 4
gpt4 key购买 nike

我在 C 中有这个 case 语句:

case GOTO: {
int o1 = (int)P[pc+1];
unsigned int o2 = (unsigned)P[pc+2];
int offset =(o1<<8) | o2;
pc = pc + (int)offset;
break;
}

现在关于代码:P[pc+x] 将给出一个 1 字节整数。基本上在这结束时,我想将 pc 设置为带符号的 4 字节 int。然而,它并没有这样做。它正在做的是获取 1 字节,将其移动,然后获取第二个字节,然后按位或,简单地添加它。它没有考虑 o1 的符号。因此,如果 P[pc+1] = FF,并且 P[pc+2] = E1,则发生的情况是 offset = 0000FFE1 .然而,我想要的是 offset = FFFFFFE1。基本上,前 2 字节应采用 P[pc+1] 的符号。但这并没有发生。我做错了什么?

最佳答案

如果这对您有意义,请检查一下: #包括

int main(void) {
short pc1= 0xFF;
short pc2= 0xE1;
int pc = 0;

unsigned int highbits = 0xFFFFFFFF;

// Check for sign bit, if true OR with highbits
// to set all remaining bits to high
int o1 = pc1 & 0xF0 ? pc1 | highbits : pc1;
int offset = (int)( (o1<<8) | pc2 );
pc = pc + (int)offset;
printf("\npc1=%x pc2=%x pc=%x", pc1, pc2, pc);
printf("\n");

return 0;
}

输出:

pc1=ff pc2=e1 pc=ffffffe1

关于c - 显式转换问题,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379032/

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