2011-06-07 246 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