[問題]課本上關於union的一個範例

看板C_and_CPP作者時間10年前 (2014/05/24 17:53), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
#include <stdio.h> #include <stdlib.h> struct sample{ unsigned a: 1; unsigned b: 1; unsigned c: 1; unsigned d: 1; unsigned e: 1; unsigned f: 1; unsigned g: 1; unsigned h: 1; }; union key_type{ char ch; struct sample bits; }key; int main(){ key.ch = getche(); if(key.bits.h) printf("1"); else printf("0"); if(key.bits.g) printf("1"); else printf("0"); if(key.bits.f) printf("1"); else printf("0"); if(key.bits.e) printf("1"); else printf("0"); if(key.bits.d) printf("1"); else printf("0"); if(key.bits.c) printf("1"); else printf("0"); if(key.bits.b) printf("1"); else printf("0"); if(key.bits.a) printf("1"); else printf("0"); return 0; } 這題我覺得奇怪的是 union應該釋放變數中占記憶體位置最大的吧?! 所以也就是 struct sample : 4 * 8 = 32 Byte 而char 只佔一個byte 那他怎麼利用這種方法將char 的ch 轉成二進位制的? 依造他的想法 struct sample的a -h應該要宣告成bool 才對吧?! 有請高手指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.243.79.235 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1400925212.A.687.html

05/24 18:13, , 1F
那個 :1 代表那個成員只佔 1 bit
05/24 18:13, 1F

05/24 18:13, , 2F
另外宣告成 bool 是不行的, 因為 bool 佔 1 byte
05/24 18:13, 2F

05/24 18:15, , 3F
文章代碼(AID): #1JW6mSQ7 (C_and_CPP)