2010-07-22 38 views
22

thể Duplicates:
What does ‘: number’ after a struct field mean?
What does ‘unsigned temp:3’ meansSử dụng: nhà điều hành trong C

Xin chào tất cả mọi người, tôi ghét phải hỏi kiểu này câu hỏi, nhưng nó thực sự bugging tôi, vì vậy Tôi sẽ hỏi:

Chức năng của toán tử: trong mã bên dưới là gì?

#include <stdio.h> 

struct microFields 
{ 
    unsigned int addr:9; 
    unsigned int cond:2; 
    unsigned int wr:1; 
    unsigned int rd:1; 
    unsigned int mar:1; 
    unsigned int alu:3; 
    unsigned int b:5; 
    unsigned int a:5; 
    unsigned int c:5; 
}; 

union micro 
{ 
    unsigned int microCode; 
    microFields code; 
}; 

int main(int argc, char* argv[]) 
{ 
    micro test; 
    return 0; 
} 

Nếu bất cứ ai quan tâm gì cả, tôi kéo mã này từ liên kết dưới đây: http://www.cplusplus.com/forum/beginner/15843/

Tôi thực sự muốn biết vì tôi biết tôi đã nhìn thấy điều này trước khi nơi nào đó, và tôi muốn hiểu nó khi tôi nhìn thấy nó một lần nữa.

Cảm ơn!

+0

Lưu ý rằng bố cục của các lĩnh vực bit là thực hiện được xác định, vì vậy kết quả của việc tiếp cận lĩnh vực bit trong một int thông qua một liên minh là không xác định. Đừng làm điều này trong mã sản xuất, sử dụng mặt nạ bit và thay vào đó thay đổi. – starblue

Trả lời

38

Chúng là các trường bit, ví dụ là unsigned int addr:9; tạo trường addr dài 9 bit.

Nó thường được sử dụng để đóng gói nhiều giá trị vào một loại tích phân. Trong trường hợp cụ thể của bạn, nó xác định cấu trúc của một hướng dẫn vi mã 32 bit cho một CPU giả thuyết (có thể) (nếu bạn cộng tất cả các độ dài trường bit, chúng tổng hợp thành 32).

Các công đoàn cho phép bạn tải trong một giá trị 32-bit duy nhất và sau đó truy cập vào các lĩnh vực cá nhân với các mã như (những vấn đề nhỏ cố định là tốt, đặc biệt là tờ khai của codetest):

#include <stdio.h> 

struct microFields { 
    unsigned int addr:9; 
    unsigned int cond:2; 
    unsigned int wr:1; 
    unsigned int rd:1; 
    unsigned int mar:1; 
    unsigned int alu:3; 
    unsigned int b:5; 
    unsigned int a:5; 
    unsigned int c:5; 
}; 

union micro { 
    unsigned int microCode; 
    struct microFields code; 
}; 

int main (void) { 
    int myAlu; 
    union micro test; 
    test.microCode = 0x0001c000; 
    myAlu = test.code.alu; 
    printf("%d\n",myAlu); 
    return 0; 
} 

này in ra 7, là ba bit tạo nên trường bit alu.

7

Đây là bit field. Số sau dấu hai chấm là số bit mà mỗi biến mất.