C語言 進制關係

二進制:數組

            逢二進位 ( 0 1 )函數

            在c代碼裏的二進制數以0b開頭:學習

                0b1001  0b1111  0b11111001指針

                0b111111111111111111111111內存

十六進制:數學

            逢十六進位( 0 1 2 3 4 5 6 7 8 9 a b c d e f )            在c代碼裏以0x開頭表達16進制數基礎

                0x1   0x1111 0xabcd 0x12ab 變量

                0xffaabbccddee11234456789數據類型

八進制:二進制

            逢八進位  (0 1 2 3 4 5 6 7)

            在c代碼裏以0開頭來表達八進制數

                012  01234567

                07654321 

十進制:        1234   = 4*1 + 3*10 + 2*100 + 1*1000

                     =4*10^0 + 3*10^1 + 2*10^2 + 1*10^3

                      = 1234

                    1234  %10  4  * 10^0  

            除10    123   %10  3  * 10^1

            除10    12    %10  2  * 10^2

            除10    1     %10  1  * 10^3

十進制轉二進制:

                1234 -> 二進制

                 1234

            /2    617    餘 0   * 2^0

            /2    308    餘 1   * 2^1

            /2    154    餘 0   * 2^2

            /2     77    餘 0   ...

            /2     38    餘 1

            /2     19    餘 0

            /2      9    餘 1

            /2      4    餘 1

            /2      2    餘 0

            /2      1    餘 0

            /2      0    餘 1

               1234  ->0b10011010010

十進制轉十六進制:

                1234 -> 十六進制

                    1234

            /16     77    餘 2

            /16     4     餘 13 ->d

            /16     0     餘 4

                1234  ->    0x4d2

十進制轉八進制:

                1234 -> 八進制

                    1234

            /8       154    餘  2

            /8        19    餘  2

            /8         2    餘  3

            /8         0    餘  2

                1234 -> 02322

總結:十進制轉n進制的方法:

                不斷的除n,除到商爲0止,餘數倒序便可

二進制轉十進制:

                0b11011001

                1 1 0 1 1 0 0 1

          冪    7 6 5 4 3 2 1 0

            1*2^0+0*2^1 + 0*2^2 + 1*2^3+1*2^4+0*2^5+1*2^6+            1*2^7 = 1+8 +16 +64+ 128 = 217 

十六進制轉十進制:

                0x123 

                1  2   3

            冪  2  1   0

                3*16^0 + 2*16^1 + 1*16^2 =3+32+256=291

八進制轉十進制:

                0123

                1 2 3

            冪  2 1 0

                3*8^0+2*8^1+1*8^2 = 3+16+64=83

二進制轉十六進制:(8421規則)

                0b1101110010101            

              ->     0001  1011    1001   0101

                  冪 3210  3210    3210   3210

                     8421  8421    8421   8421

                       1     11     9      5

                       1      b     9      5

                -> 0x1b95

十六進制轉二進制:(每一個十六進制位變成4個二進制位)  

                    0xabcd1234

                    a    b    c    d    1    2    3    4

            0b     1010 1011 1100 1101 0001 0010 0011 0100 

                0b10101011110011010001001000110100

二進制轉八進制:(421規則)

                0b11010010010101

                 011 010 010 010 101

            冪   210 210 210 210 210

                 421 421 421 421 421

            ->    3   2   2   2   5

            -> 032225

八進制轉二進制:(每一個八進制位變成3個二進制位)

                    01234

                      1    2    3    4

                ->   001  010  011  100

            ->      0b 1 010 011 100

                   ->     0b1010011100

二進制的加法:

                0b 1 1 0 1 0 1 1 1

            +   0b 0 1 1 0 1 0 1 0

            --------------------------

              0b 1 0 1 0 0 0 0 0 1

八進制的加法:

                0   1 2 3 4

                0   7 6 5 3

            -----------------

                  1 1 1 0 7

**********************************

原碼  反碼  補碼

        

    概念:

        機器數:  11011010

            機器數就是一種內存狀態,即一種二進制狀態,不能

            讀成咱們數學意義上的數值

        真值:    有一個機器數11011010

                有符號的真值的表達方式:

                最高位的概念:

                            若是是1字節的數據,

                                第7位就是最高位

                            若是是2字節的數據

                                第15位就是最高位

                            若是是4字節的數據

                                第31位就是最高位

                            若是是8字節的數據

                                第63位就是最高位

                    最高位表明符號位  

                    最高位爲1表明負數

                    最高位爲0表明正數

                10011000   有符號表達一個真值:-24

                無符號的真值的表達方式:

                    直接將機器數當作二進制數轉成十進制便可

                例:

                    10011000 -> 128+24= 152  

    原碼:  

            正數的原碼 就是將它轉成二進制數便可,

            本質是(機器數,是一種二進制狀態)

            負數的原碼: 最高位爲符號位 剩下的位表明數值

            例:

                1字節的數-25  的原碼(的機器數):10011001 

                1字節的數25   的原碼(的機器數): 00011001

                2字節的數-25  的原碼(........): 

                              1000000000011001

                2字節的數25   的原碼:

                              0000000000011001

    反碼:  正數的反碼等於原碼

            負數的反碼是在原碼的基礎上,符號位不變,其他

            位取反

                1字節的數-25  的反碼:

                    (原)10011001 ->  (反)11100110

                1字節的數25   的反碼:

                    (原)00011001 ->  (反)00011001

                2字節的數-25  的反碼:

                    (原)1000000000011001

                  ->(反)1111111111100110

    補碼:

            正數的補碼等於原碼

            負數的補碼是在原碼的基礎上,符號位不變,其他

            位取反後+1 

                1字節的數-25 的補碼:

                    (原)10011001

                 -> (反)11100110

                 -> (補)11100111

                2字節的數-25 的補碼:

                    (原)1000000000011001

                  ->(反)1111111111100110

                  ->(補)1111111111100111

爲何要學習補碼:

        

        假設拿原碼作加法運算:

                25  00011001

            +  -24  10011000

        -----------------------

                    10110001  = -49

        用原碼參加運算會發生錯誤

        因此用補碼試試:

                25  00011001

               - 4  11111100

            -------------------

                    00010101

*************************************

數據類型  變量   內存    

            char c=-114;

            unsigned char uc=142; 

            上邊這兩個變量的內存狀態徹底同樣

        

    數據類型的概念:

            是一種規則,這種規則可以知道訪問內存時須要

            訪問幾個字節, 同時也能知道將內存裏的狀態以

            什麼樣的表達方式表達出來

    變量的概念:

            參照一種規則(數據類型),對某一個內存地址打上

            一個標籤,劃定一個大小,有這種變量以後,程序

            處理數據時就能夠經過變量名來訪問內存

    

    數據類型分類: 

                    標量類型: 整型  浮點型, 指針,  

                    聚合類型: 數組和結構體

        學習某種數據類型時:

                        討論該數據類型的變量的三個屬性:

                            值, 地址,  內存大小

                        數組類型:

                            元素, 地址, 內存大小

                        結構體:

                            成員   地址   內存大小

            

            整型變量:

                         有符號      無符號

                 1 字節  char        unsigned char

                 2 字節  short (int) unsigned short

                 4 字節  int         unsigned int

                 8 字節  long        unsigned long

                 8 字節  long long   unsigned long long

           

           printf這個函數的格式控制:

                int a;

                printf(" %d ", a);  以有符號整型輸出4個字節

                printf(" %p ", &a); 以16進制輸出8個字節

                long l;

                printf(" %ld ",l ); 以有符號整型輸出8個字節

                unsigned long ul;

                printf(" %lu ",ul); 以無符號整型輸出8個字節

                char c;

                printf(" %d ",c); 將單字節整型以有符號整型4字節輸出

                printf(" %c ",c); 將單字節整型以字符形式輸出

                printf(" %x ",a); 以16進制輸出4個字節

                討論一下各類長度的整型變量的取值範圍 

                  char            [-128, 127]

                  unsigned char   [0 ,   255]

                  short int       [-2^15 ,2^15-1]

                  unsigned short  [0 ,   2^16-1]

                  int             [-2^31, 2^31-1]

                  unsigned int    [0,  2^32-1]

                  long            [-2^63, 2^63-1]

                  unsigned long   [0,   2^64-1]

       

       浮點型變量:

                    float   4個字節

                            精確到小數點後6位

                            printf("%f",f); %f輸出6位小數

                    double  8個字節

                            精確到小數點後12位

                            printf("%1.12f",f); %1.12f輸

                            出12位小數,1位整數

        

          數據類型之間隱式轉換的原則:

                相同數據類型之間:只能從小內存往大內存轉

                整型與浮點型之間:整型能夠轉浮點型

                                  但浮點不能轉整型

相關文章
相關標籤/搜索