2011-06-07 116 views
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.

任何帮助,我真的很感激。

+2

“我的预期发生了(除以8)的3个字节右移” 不,3 __bits__右移。 – orlp 2011-06-07 07:05:12

+4

如果右移3,它将是255(0xFF)。 ;) – 2011-06-07 07:06:18

+1

所以你可以展示一个更完整的代码片段。你如何设置'idtr',你如何确定'num_ids'是'0'。你打印了吗?在调试器中看到它?等 – 2011-06-07 07:08:51

回答

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