简单的分配

时间:2011-06-07 07:02:32

标签: c bit-shift

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

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.

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

此:

#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。