【學習ios之路:C語言】進位.位元運算.棧

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   on   

1.進位轉換

1).10進位轉為N進位.方法:(連除倒取餘).

2).N進位轉換為10進位.方法:(按權求和法):當前位上的數乘以基數的位元減1次方.

例:

0b1111 ---- 1* 2^3 + 1*2^2 +1 * 2^1 +1*2^0 = 15;

038 ----- 3*16^1 +8*16^0 = 56;

3).N進位轉換N進位.

例如: 二進位 --- 16進位

      1010   0011  ----  A 3  

       1111   0011  ----  F 3 

           int a = 010;//8進位    int b = 0x10;//16進位    printf("%d\n", a);    printf("%d\n", b);        /**     如何輸出進位數:      %d  ------  十進位      %0x ------ 十六進位      %o  ----  八進位     */    

 2.位元運算符


            //按位與    &    int a = 5 & 7;//5 101 7 111 同為1,則為1.否則為0  .,常用來給某一位做清零操作.    printf("%d\n", a);//101        //按位或    |    int b = 5 | 7;// 101 111 同為0,則為0,否則為1.,,常用來保留某一位狀態.    printf("%d\n", b);//111         //按位異或  ^    int c = 5 ^ 7;    printf("%d\n",c);//101  111  010 ,相同為0,不同為1        //按位非    ~    char d =  ~ 7;//每一位都做取反操作.    printf("%d\n", d); //7 111  -1000 -8            //負數補碼運算: 絕對值取反 加1  符號位 1 相當於 -  0 相當於 +    //如果是一個有符號的數,則二進位最高位代表符號位,1 代表負數,0代表正數.    //資料在記憶體中儲存時是以補碼的形式儲存,正數的補碼是正數本身,負數的補碼是絕對值取反加一.    //一個位元組代表八位位元.    /**     *  資料類型的取值範圍:     *  無符號:     *  char 0 ~ 2^8 - 1  //0 - 255     *  short 0 ~ 2^16 -1     *  int 0 ~ 2^32 - 1     *  有符號:     *  char 11111111有符號,最高位是符號位, - 2^7 ~2^7 - 1  -128 - 127(正數包括0,即128)     *  short - 2^15 ~ 2^15 - 1     *  int - 2^31 ~ 2^31 - 1     */        char f = 255;//11111111 絕對值01111111 取反 100000000 加1 100000001 即 -1,負數是按照補碼儲存的    printf("%d\n", f);//-1       unsigned char e = 255;    printf("%d\n",e);//超出範圍溢出,即為0    //左移     <<    unsigned char g = 1;    printf("%d\n",g << 3);//乘以2的3次方  // 8    //右移     >>    printf("%d\n",255 >> 2);//除於2的2次方  //63
例題:

1.將100高四位與第四位互換.100: 0110 0100

        unsigned char number = 0b01100100;        //1.左移動四位    unsigned char left = number << 4;//01000000       //2.右移動四位    unsigned char right = number >> 4;//00000110    //3.按位或        unsigned char result = left | right;//01000110    printf("%d\n", result);//70

2.將10010010 奇偶位互換

        unsigned char num = 0b10010010;//146    //1.向左移動一位,得到奇數位    unsigned char left1 = num << 1; //00100100 ,因為是char型,當向左移動,值=146*2溢出.但換位int型就ok了.char類型範圍,-128 - 127    printf("左移:num = %d,left1 = %d\n", num, left1);       //2.保留偶數為,將奇數位清零.  00100000    unsigned char l = left1 & 0b10101010;//奇數位清0,即奇數位為0.&同為1即為1         //3.向右移動一位得到     unsigned char right1 = num >> 1;//01001001     //printf("右移:num = %d,right1 = %d\n", num, right1);         //4.保留奇數位,講偶數位清零. 01000001     unsigned char r = right1 & 0b01010101;        //5.按位或    unsigned char s = r | l;    printf("%d\n", s);     

2.兩個數交換,不使用第三個變數(企業級做法)

        int m = 10, n = 5;    m = m ^ n;    n = m ^ n;    m = m ^ n;    printf("%d %d\n", m, n);    

4.棧記憶體配置原則

            <span style="color:#000000;">/**     * 棧區記憶體配置原則     * 原則: 從高到低分配,從低到高存取.     * 地址: 記憶體單元的一個編號     */    //數組名代表數組的首地址,也就是數組中第一個元素的地址.是一個常量地址.    int m1[5] = {1, 2, 3, 4, 5};    printf("%p\n", m1);    //0x7fff5fbff7f0結果    printf("%p\n", &m1[0]);//0x7fff5fbff7f0    printf("%p\n", &m1[1]);//0x7fff5fbff7f4    printf("%p\n", &m1[2]);//0x7fff5fbff7f8    printf("%p\n", &m1[3]);//0x7fff5fbff7fc    printf("%p\n", &m1[4]);//0x7fff5fbff800 //存取,從高到低存取    printf("-------------------------\n");        int x = 5;    int y = 10;    printf("%p\n",&x);//0x7fff5fbff7b8    printf("%p\n",&y);//0x7fff5fbff7b4,可看出從高到底分配空間            int s1 = - 5;// 1000  0000 0000 0000 0000 0000 0000 0101 按照補碼儲存,絕對值取反加一    printf("%d\n", s1);//1111 1111 1111 1111 1111 1111 1111 1011 FF FF FF FB //斷點 </span>


【學習ios之路:C語言】進位.位元運算.棧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.