在 C 中屏蔽一点返回意外结果

发布于 2024-10-12 06:04:34 字数 593 浏览 5 评论 0原文

0x7F000000 是 32 位二进制的 0111 1111 0000 0000 0000 0000 0000 0000
0x010000580000 0001 0000 0000 0000 0000 0101 1000

当我将这两个数字相加时,我期望0000 0001 0000 0000 0000 0000 0000 0000,但由于某种原因我得到0。

这是我的代码:

#define MASK_binop     0x80000000
#define MASK_operation 0x7F000000

int instruction=atoi(line);
if((MASK_binop & instruction)>0)
    printf("binop\n");
else if((MASK_operation & instruction)>0)
    printf("operation\n");

上面的每个比较都保持返回零。跟32/64位有关系吗?我使用的是 64 位编译器。

0x7F000000 is 0111 1111 0000 0000 0000 0000 0000 0000 in 32 bit binary.
0x01000058 is 0000 0001 0000 0000 0000 0000 0101 1000.

When I AND the two numbers together I expect 0000 0001 0000 0000 0000 0000 0000 0000, but for some reason I get 0.

Here is my code:

#define MASK_binop     0x80000000
#define MASK_operation 0x7F000000

int instruction=atoi(line);
if((MASK_binop & instruction)>0)
    printf("binop\n");
else if((MASK_operation & instruction)>0)
    printf("operation\n");

Each of the above comparisons keeps returning zero. Is it something to do with 32/64 bits? I'm using 64-bit compiler.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

薯片软お妹 2024-10-19 06:04:34

如果行包含“0x01000058”,那么 atoi 将返回 0,因为 atoi 使用十进制表示,而不是十六进制 0x 表示。那么 AND 显然为零。尝试打印指令的值。

If line contains "0x01000058" then atoi will return 0 as atoi works with decimal representation, not hex 0x representation. And then the AND obviously is zero. Try to printf the value of instruction.

浅忆 2024-10-19 06:04:34

执行

printf("%x", instruction);

并确保指导确实符合您的期望。

您还可以:

printf("%x", MASK_binop & instruction);
printf("%x", MASK_operation & instruction);

看看究竟发生了什么。

Do

printf("%x", instruction);

and ensure that instruction is really what you expect it to be.

you can also do:

printf("%x", MASK_binop & instruction);
printf("%x", MASK_operation & instruction);

To see what exactly is happening.

拔了角的鹿 2024-10-19 06:04:34

我刚刚尝试过,它似乎按预期工作。执行 printf( "%x\n", instructions); 来显示该值是什么。

I just tried it and it appears to work as expected. Do a printf( "%x\n", instruction); to show what the value is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文