第06天C語言(00):筆記總結

01-進制轉換-基本概念
如何輸出十進制 %i %d, 以十進制的方式輸出數據

 在編程中想表示二進制,需要在數字前面加上0b

 %o 就是以八進制的形式輸出

 在編程中想表示八進制,需要在數字前面加上0 

 %x 就是以十六進制的形式輸出

 在編程中想表示十六進制,需要在數字前面加上0x


 注意: 在C語言中沒有以二進制輸出的占位符
02-進制轉換
1.十進制 轉 二進制

 規律 : 用需要轉換的十進制 除以2 取余數 , 然后倒數

     13 / 2 = 6 余 1

     6 / 2 = 3 余 0

     3 / 2 = 1 余 1

     1 / 2 = 0 余 1

     -------- = 1101

 

 2. 二進制 轉 十進制

 規律 : 從低位數開始, 用低位 乘以 2的 多少次冪, 冪數從0開始,然后再相加

     二進制 : 1101

         1 * 2(0) = 1

         0 * 2(1) = 0

         1 * 2(0) = 4

         1 * 2(3) = 8

         1 + 0 + 4 + 8 = 13

     口訣

         1 1 1 1

         8 4 2 1

 

 3.  二進制 轉 八進制

 規律 : 三個二進制位 代表一個八進制位, 只需要將3個二進制位 轉換為十進制, 之后再將所有的結果連接起來

        1001 轉換為  00 001 001

        0  1   1

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

        011 == 0 * 8 + 1 * 8 + 3 = 11(十進制)

 

4. 二進制 轉 十六進制

 規律 : 四個二進制位代表一個十六進制位, 只需要將4個二進制位轉換成10進制, 之后再將所有的結果連接起來

     0001 1011

     --------

     1   b = 0x1b
03-原碼補碼反碼
為什么要有 原碼 / 反碼 / 補碼 ? 主要是為了方便計算機計算

 其實二進制的第一位 是二進制的符號位

 如果該位是0 代表這個數 是正數

 如果該位是1 代表這個數 是負數

 

 正數

 總之一句話, 正數的原碼\補碼\反碼 都是一樣的,三碼合一

 負數

 反碼 : 符號位不變, 其他位取反(0變1,1變0)

 補碼 : 反碼 + 1就是補碼

 

 9的二進制

 正數

 0000 0000 0000 0000 0000 0000 0000 1001 (原碼)/反碼/補碼

 負數

 1000 0000 0000 0000 0000 0000 0000 1001 (原碼)

 1111 1111 1111 1111 1111 1111 1111 0110 (反碼)

 1111 1111 1111 1111 1111 1111 1111 0111 (補碼)

 

 

 // 補碼的深入

 1 - 1 = 1 + (-1)

 原碼 計算結果 = -2

 反碼 計算結果 = -0

 補碼 計算結果 = 0
04-位運算
位運算 (和二進制相關)

 

 1.& 按位與

 規律 : 一假則假, 1真 0假

 規律 : 任何數和 1 相& 得到的結果還是那個數

        1001 & 1111 = 1001

 

 2.| 按位或

 規律 : 一真則真

 

 3.^ 按位異或

 重點 : 異或的結果 和 參與運算的順序沒有關系

 規律1 : 不相同為1, 相同為0 (異或)

         1001 ^ 0101 = 1100

 規律2 : 相同的兩個數 異或 等于0

        5 ^ 5 = 0101 ^ 0101 = 0

 規律3 : 任何數 和 0 異或上0 結果不變

        5 ^ 0 = 0101 ^ 0000 = 0101 = 5

 規律4 : 任何一個數 異或上 同一個數兩次, 結果不變

        9 ^ 5 ^ 5 = ?  == 9 ^ 0 = 9

 ~ 取反

    計算機是以補碼形式存在的

    1.先拿到數 的原碼 [進行一個取反] 在 -1 變成反碼 再將反碼 轉為原碼

   一 . 9 原碼 0000 0000 0000 0000 0000 0000 0000 1001

   二 . 取反的得到補碼 -->

       1111 1111 1111 1111 1111 1111 1111 0110 的到的補碼

   三 .  再將 補碼 -1變成反碼 -->

        1111 1111 1111 1111 1111 1111 1111 0101

   四 . 再將反碼取反變回原碼  --->

        1000 0000 0000 0000 0000 0000 0000 1010 == -10

  ~9 = -10

 

 

 原碼 --> 反碼(取反) -->(補碼)+1

 補碼 -->  反碼(-1) --> 原碼(取反)
05-左移右移
左移 <<

     規律 : 左移 就是左移的數乘以2的移動次冪

     例如

         9 << 1 = 9 * 2(1)  = 18

         9 << 2 = 9 * 2(2)  = 36

     注意點 :

     由于左移運算,被移動的數 最高位會被拋開(移除),所以左移有可能會改變一個數的正負性

 右移 >>

    規律 : 右移 就是右移的數除以2的移動次冪

        9 >> 1 = 9 / 2(1) = 4;

        9 >> 1 = 9 / 2(2) = 2;

     注意 : 負數的左移右移 是補碼在移動,因為負數都是以補碼的形式存儲在內存中的

     應用場景 :  如果想讓某一個數 乘以2的多少次冪,或者除以2的多少次冪,最高運算方式就是左移右移
06-位運算-練習1
     使用按位與 &

     任何數和 1 相& 得到的結果還是那個數

     

                                           0000 0000 0000 0000 0000 0000 0000 1001

    &0000 0000 0000 0000 0000 0000 0000 0001

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

     // 1.讓9的二進制向右移31位,就可以獲取到9的最高位的二進制,然后讓9的二進制的最高位 和1相與,那么就可以獲得9的最高位

     // 2.讓9的二進制向右移動30位,就可以獲取9二進制第二位

     // 3.以此類推,直到0位置

 

     技巧

     1.任何數 與 1相& 都是那個數

     2.利用位移 取出每一位
07-位運算-練習2
1001   9

 1010   10

 

 1011   11

 1100   12

 

 通過觀察,

 我們發現如果是偶數,那么二進制的最后1位是0,

 如果是奇數,那么二進制的最后1位是1.

 if ((num & 1) == 1) {

 printf("奇數");

 }

 else

 {

 printf("偶數\n");

 }
08-位運算-練習3
    /*

     不相同為1, 相同為0 (異或)

     */

    

    /*

    a = a ^ b;

    b = a ^ b; // a ^ b ^ b = a ^ 0 = a

    a = a ^ b; // a ^ b ^ a = b ^ 0 = b

    */

#pragma 開發簡單加密

    // 用戶密碼, 純數字

    int pwd = 123;

    // 對用戶密碼 進行簡單加密

    int result = pwd ^ 456;

    // 對用戶密碼進行解密

    result = result ^ 456;
09-變量內存分析
主要定義變量, 系統就會開辟一塊存儲空間 給我們的變量存儲數據,內存尋址是從大到小

 越先定義的變量,內存地址越大

 

 注意 : 由于內存尋址是從大到小, 所以存儲數據也是從大到小的存儲(先存儲二進制的高位,再存儲低位)

    高位          --> 低位

 0000 0000 0000 0000 0000 0000 0000 1001
10-char類型-基本概念
計算機只能識別0和1 'a' 通過ASCII碼表 獲取一個值 轉換成二進制

 在C語言中, 不看怎么存, 只看怎么取

 char類型 在某些情況下 可以當做整型來用

 如果對內容要求特別嚴格,而且需要存儲的整數 不超過char類型的取值范圍,那么就可以使用char類型來代替int類型

 -2(7)~2(7) - 1 = -128 ~ 127

 char c =128; // 打印出來 -128 因為超出了范圍
11-char類型-練習
大寫 ASCII碼 65 - 90

小寫 ASCII碼 97 - 122

差值  ('a' - 'A')  97 - 65 = 32;
12-類型說明符
類型說明符:

  1.說明長度的 (它可以用于修改 類型 所占用的存儲空間的大小)

 short; 

    輸出 %hi hd          // 2個字節 == -2(15)~2(15)-1

 long;  

    輸出 %li ld          // (64位占8個字節) 32 位long 占用4個字節 ,  long long 占用 8個字節 == -2(63) ~ 2(63)-1

 long long;

    輸出 %lli %lld    // 8個字節 == -2(63) ~ 2(63)-1

 用于說明數據類型, 一般情況下 和 int 配合使用

 

 2.說明符號位 (它可以用于修改符號位)

 unsigned;  (無符號) 輸出 %u  . 取值 整數 和 零

 

 signed;    (有符號的)          取值 正數 和 零 以及 負數

        如果給變量加上修飾符 signed 代表當前變量的取值可以是 正數 / 負數 /零

        如果給變量加上修飾符 signed 就代表把 二進制的最高位作為符號位

        而且默認情況下所有變量都是有符號的(signed)

 

 3.不同類型的說明符 可以混合使用

 unsigned short

 signed long

 注意 : 相同類型的 說明符 不能同時在一起使用
13-數組-基本概念
/*

 數組的定義格式 :

 數據類型 變量名稱;

 數據類型 數組名稱[數據的個數];

 元素類型 數組名稱[元素個數];

 元素類型:就是數組中需要存儲的數據類型 , 一旦確定, 數組中就只能存儲該類型的數據

 元素個數:  就是數組中能夠存儲的數據(元素)的個數

 */
14-數組-初始化
數組的部分\完全初始化

    部分初始化 [1)默認從0開始初始化 -- 2)如果"在部分初始化中",對應的內存沒有被初始化, 那么默認是0]

        int scores1[3] ={11,22};

    完全初始化 [1) 依次將{}中的每一個值 賦值給數組中的每一個元素 -- 2)并且從0開始賦值]

        int scores[5] = {99,88,77,66,100};

 

  注意1:如果沒有對數據進行初始化(完全和部分),那么不要隨便使用數組中的數據,可能是一堆垃圾數據(隨機值)

        int scores2[3]; // 0 = 32767 1 = 0 2 = 0

  注意2: 定義數組的時候,數組的元素個數不能使用變量,如果使用變量,那么數組中 是一些隨機值

        int num = 3; int scores3[num]; // 0 = 1606416240 1 = 32767 2 = 3611

  (報錯)注意3: 不建議使用變量定義數組,如果使用了變量定義數組, 作為數組的元素個數,不初始化的情況下是隨機值,如果初始化會直接報錯

        int num1 = 3;int scores4[num1] = {11,12};

  注意4: 如果定義的同時進行初始化,那么元素的個數可以省略

        省略之后, 初始化賦值幾個數據,那么數組的長度就是幾,也就是說數組將來就能存儲 幾個數據

        int scores5[] = {1,3};

  (報錯)注意5: 如果定義數組時沒有進行初始化, 那么不能省略元素個數

        int scores6[];

  可通過[索引] = 的方式, 給指定索引的元素賦值

        int scores7[101] = {[99]=1,[100]=5};

  (報錯)注意6: 只能在定義的同時 利用{}進行初始化,如果是先定義 那么就不能使用{}進行初始化

        如果先定義 那么就不能再進行整體賦值, 只能單個賦值

        int scores8[3];

        scores8 = {1,3,4};
15-數組-遍歷
    // 注意 : 在遍歷數組的時候, 盡量不要把遍歷的次數寫死

    // 遍歷多少次應該 由數組來決定 , 也就是說遍歷多少次 應該通過數組計算得出

    /*

    printf("scores = %lu\n",sizeof(scores)); // 計算出數組中占用的總字節數

    printf("socre[0] = %lu\n",sizeof(scores[0])); // 計算出數組中某一個元素占用的字節數

    printf("一個有多少個元素 : %lu\n",sizeof(scores) / sizeof(scores[0]));

    */

    // 動態計算數組的元素個數

    int length = sizeof(scores) / sizeof(scores[0]);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容

  • 1.編譯程序(1)gcc xx.c,他會默認生成一個a.out的可執行文件,在a.out所在目錄,執行./a.o...
    萌面大叔2閱讀 1,314評論 0 1
  • 基礎 .NET概述 參考:http://www.cnblogs.com/yplong/p/3279934.html...
    donite閱讀 1,638評論 0 8
  • 1、標識符 什么事標識符呢?變量的名字就是標識符。不僅限于變量名,程序中各種元素的名字,都屬于標識符。例如符號常量...
    滕王閣序閱讀 951評論 0 0
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,610評論 4 12
  • 時隔八天,我才又一次寫東西。 因為上次搬家,就在也沒好好的早起,讀書,寫文章。 都知道的,該干什么。 這期間阿姐又...
    大腦洞呀大腦洞閱讀 125評論 0 0