全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:840
推到 Plurk!
推到 Facebook!

struct存放位元問題

尚未結案
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-02 21:52:16 IP:59.104.xxx.xxx 未訂閱
#include 
#include     struct flag
{
    int f1:1;
    int f2:2;
    int f3:3;
    int f4:4;
    int f5:5;
}test;    int main(void)
{ 
    
    printf("%d\n",test.f1=10);
    printf("%d\n",test.f2=10);
    printf("%d\n",test.f3=10);
    printf("%d\n",test.f4=10); 
    printf("%d\n",test.f5=10);
     
 
    system("pause"); 
    return 0;
}    下面是輸出結果:
0                 //1bit時候為什麼是0
-2                //2bit時候為什麼是-2
2                 //3bit時候為什麼是2
-6                //4bit時候為什麼是-6
10
請按任意鍵繼續 . . .

可以解釋一下註解問題謝謝    
十進位10需要5bit才能正確表示出來 那進位100至少需要多少bit 才能正確顯示出來 懂的大大可以順便解釋一下數值需多用多少bit表示的"原理"?? 還有我說一下我自己想法不過應該是錯誤的,錯誤地方麻煩指點 10轉成2進位 ==>1010 只需要4bit....為什麼需要用到5bit還是編譯器不是這 樣計算的?? 謝謝 發表人 - syao 於 2005/08/02 22:00:47
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-02 23:02:13 IP:210.64.xxx.xxx 未訂閱
你要去看看 signed and unsigned 了。 為什麼是負數。在那個 bit 是 1? 至於為何是 -2, -x.... 你可以把你的 stuct 用 單步執行去看它。 因為你所存入的值大於它的空間(bit 數) 那會發生什麼事?^_^ C 沒有禁止你做這樣的事。 但是這樣做,就會有些錯亂。 單步去查查看 test 的值吧。^_^
yhchu
一般會員


發表:2
回覆:70
積分:24
註冊:2004-01-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-03 17:09:35 IP:220.130.xxx.xxx 未訂閱
10 -> B1010 所以 f1: B0 (只看最小的,也就是最右邊的 bit) f2: B10->-2 (左邊的 1 表示是負數,負多少以 2's complement 表達,詳細情形請查計算機概論的書,你只要想像把除了最左邊的 bit 以外其他的 bits 都顛倒再加 1 就對了,B0->B1 再加 1 變成 B10,也就是 2,所以是 -2) 其他的依此類推,讓你試試看。
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-03 23:09:52 IP:59.104.xxx.xxx 未訂閱
yhchu 謝謝你    大概知道你的說法~~    還有我改成unsigned   宣告1bit 實際上是2bit對嗎??    宣告bit都被兩倍嗎??還是只有最高bit為0??    
#include 
#include     struct flag
{
    unsigned int f1:1; //00          bit
    unsigned int f2:2; //0000         .
    unsigned int f3:3; //000000       .  
    unsigned int f4:4; //00000000     .
    unsigned int f5:5; //0000000000  bit
}test;    int main(void)
{ 
    
    printf("%d\n",test.f1=10);
    printf("%d\n",test.f2=10);
    printf("%d\n",test.f3=10);
    printf("%d\n",test.f4=10); 
    printf("%d\n",test.f5=10);
     
 
    system("pause"); 
    return 0;
}    0
2
2
10
10
請按任意鍵繼續 . . .    
謝謝
系統時間:2024-05-21 10:38:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!