2019-2020-1 20175223 《信息安全系統設計基礎》第2周學習總結

目錄linux


教材學習內容總結

  • 第一週要點:
    • 要點1:TCP/IP協議族簡介;
    • 要點2:正則表達式基礎;
    • 要點4:教材第二章。

  • 教材第二章 「信息的表示和處理」 要點:
    • 要點1:信息存儲:
      • 大端法與小端法;
      • 整形與浮點型對同一數值的格式;
      • 布爾代數:& , | , | , ^
    • 要點2:C語言中的運算:
      • 位級運算:布爾運算、掩碼運算;
      • 邏輯運算:&& , || , !
      • 移位運算:邏輯左移、邏輯右移(無符號數)、算數右移(有符號數);
    • 要點3:整數表示:
      • 無、有符號數編碼;
      • 有符號數原碼、反碼錶示;
      • 有、無符號數之間的轉換
      • 擴展、截斷數字;
    • 整數運算:
    • 浮點數:
      • 二進制小數;
      • 舍入;
      • 舍入;
      • 浮點運算;
      • C語言中的浮點數。



教材學習中的問題和解決過程

1. 什麼是位模式?

  • 問題回答:
    計算機中全部二進制的0、1代碼所組成的數字串。在位模式中,從右向左每位有一個固定的權值,相鄰位之間權是一個固定的比例關係。

2. 對於 有符號數和無符號數之間的轉換 的理解

在轉換時, 位模式中每一位的數值是同樣的、不改變的;改變的是最高位(有符號數符號位、無符號數最高有效位)的權值。git

3. 數值絕對值相同,正數與負數之間的轉換(練習題 2.21)

表達式 類型 求值
-2147483647-1 == 2147483648U ( _____________________ ) ( _____________________ )
-2147483647-1 < 2147483647 ( _____________________ ) ( _____________________ )
-2147483647-1U < 2147483647 ( _____________________ ) ( _____________________ )
-2147483647-1 < -2147483647 ( _____________________ ) ( _____________________ )
-2147483647-1U < -2147483647 ( _____________________ ) ( _____________________ )
  • 問題緣由分析:
    -2147483647-1 值得是C語言中 TMin 的寫法,不可簡單寫成 0x80000000
    仍是沒有搞懂:數值絕對值相同的狀況下,正數與負數之間的轉換。
    除0之外,符號位取反,數值位按位取反,再+1;便可將正數(或負數)轉換爲負數(或正數)。
    例如:
    第5個小題:-2147483647-1U0x80000000 (2^31), +21474836470x7FFFFFFF ((2^31)-1) ,-21474836470x7FFFFFFF 符號位取反(==0xFFFFFFFF),數值位按位取反(==0x80000000),再+1(==0x80000001)。因爲是無符號數與有符號數之間的比較,有符號數按無符號數看,因此-2147483647-1U < -21474836470x01正則表達式

  • 問題解決方案:安全

表達式 類型 求值
-2147483647-1 == 2147483648U 無符號數 0x01
-2147483647-1 < 2147483647 有符號數 0x01
-2147483647-1U < 2147483647 無符號數 0x00
-2147483647-1 < -2147483647 有符號數 0x01
-2147483647-1U < -2147483647 無符號數 0x01

4. 對於 有符號數的加法溢出 的疑惑

  • 疑惑:
    1 - 1 的存在溢出麼?
    [0001] - [0001] = [0000] 對麼?學習

  • 疑惑解答:
    1 - 1 的存在溢出。
    [0001] - [0001] = [0000] 錯誤。
    對於無符號數而言,減法直接借位減。但對於有符號數來講,被減數爲負數時,是加上該負數的補碼。
    這麼來講的話, 1 - 1 的二進制過程爲:
    [0001] + [1111] = [10000] 截斷4位以後爲 [0000] ,此時是溢出。編碼

運行以下實例:.net

# include <stdio.h>

int tadd_ok(int x, int y);

int main() {
    printf("%d\n",tadd_ok(0X00000001, 0x8FFFFFFF));
    printf("%d\n",tadd_ok(1, -1));
}

int tadd_ok(int x, int y) {
    int sum = x+y;
    int neg_over = x < 0 && y < 0 && sum >= 0;
    int pos_over = x >= 0 && y >= 0 && sum < 0;
    return !neg_over && !pos_over;
}

結果:設計

Linux> ./a.out 
1
1

5. 用 myod XXX 實現 Linux 下 od -tx -tc XXX 的功能


[代碼託管]

對應倉庫網頁連接:https://gitee.com/Yogile/Cpt_System_Yogilecode

  • 代碼提交過程截圖:

  • 代碼量截圖:



學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 4000行 20篇 280小時
第一週 66/66 1/1 24/24
第二週 427/493 2/3 25/49
  • 計劃學習時間:16小時

  • 實際學習時間:25小時


參考資料

相關文章
相關標籤/搜索