简单的分配

发布于 2024-11-14 18:22:28 字数 383 浏览 2 评论 0原文

这是我的问题。我定义了以下结构

struct idt_reg{
  unsigned short limit;
  unsigned int base;
}__attribute__((packed));

在我的代码中我做了以下分配

unsigned short num_ids = idtr.limit >> 3;

现在执行时,当idtr.limit中存储的值等于2047(0x7FF)时,我期望发生的是右移3 位(除以 8)并将值 255 写入 num_ids。相反,num_ids 的值始终为 0。

如果有任何帮助,我将非常感激。

Here's my problem. I have the following structure defined

struct idt_reg{
  unsigned short limit;
  unsigned int base;
}__attribute__((packed));

In my code I do the following assignment

unsigned short num_ids = idtr.limit >> 3;

Now upon execution, when the value stored in idtr.limit is equal to 2047(0x7FF), what I expected to happen was a right shift of 3 bits (divide by 8) and get the value of 255 written to num_ids. Instead the value of num_ids is always 0.

Any help I would really appreciate.

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

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

发布评论

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

评论(1

茶花眉 2024-11-21 18:22:28

这:

#include <stdio.h>

struct idt_reg{
  unsigned short limit;
  unsigned int base;
}__attribute__((packed));

int main() {
    struct idt_reg idtr;
    unsigned short num_ids;
    idtr.limit = 2047;
    num_ids = idtr.limit >> 3;
    printf( "%d\n", num_ids );
}

打印 255。

This:

#include <stdio.h>

struct idt_reg{
  unsigned short limit;
  unsigned int base;
}__attribute__((packed));

int main() {
    struct idt_reg idtr;
    unsigned short num_ids;
    idtr.limit = 2047;
    num_ids = idtr.limit >> 3;
    printf( "%d\n", num_ids );
}

prints 255.

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