日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2018-2019-1 20165330 《信息安全系统设计基础》第二周学习总结

發布時間:2024/9/21 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018-2019-1 20165330 《信息安全系统设计基础》第二周学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習內容總結

信息的表示與處理
  • 字節:計算機中最小的可尋址的內存單元
  • 虛擬內存:機器級程序將內存視為一個非常大的字節數組
  • 進制表示及轉換
    • 十進制:D=dndn-1...d1d0.d-1...d-m(m,n為正整數)
    • 二進制:B=bnbn-1...b1b0.b-1...b-m(m,n為正整數)
    • 八進制:O=onon-1...o1o0.o-1...0-m(m,n為正整數)
    • 十六進制:H=hnhn-1...h1h0.h-1...h-m(m,n為正整數),在C語言中以0x或0X開頭的數字常量為十六進制的值
    • 進制轉換:
      • 十進制轉換R進制:整數部分除以R,商為權值,直至商為0并以下至上排列;小數部分不斷乘R記錄結果的整數部分并以上至下排列
      • 二進制轉換八進制:每三位為一個八進制,不足在最高位補0
      • 二進制轉換十六進制:每四位為一個十六進制,不足在最高位補0
  • 對于一個字長為w位的機器,虛擬地址的范圍為0~2^w-1,程序最多訪問2^w個字節
  • 可在32位或64位機器上運行的程序指令:gcc -m32 prog.c
  • 大端法規則:最高有效字節在最前面
  • 小端法規則:最低有效字節在最前面
  • 在計算機系統中,程序僅僅只是字節序列
  • 位級運算
    • 位向量:固定長度為w、由0和1組成的串,絕大多數可表示一個數
    • 位級運算包括:
      • “|”或運算:兩個0時為0
      • “&”與運算:有0即為0
      • “~”非運算:即取反
      • “^”異或運算:兩個相同數為0
  • 邏輯運算
    • 在邏輯運算中,只有0、1兩種表示,非零參數都表示TRUE,0表示FALSE
    • 邏輯運算包括:
      • “&&”:與1與為true,與0與為false
      • “||”:有操作數為true則為true
      • “!”:取反
  • 移位運算
    • 左移x<<k:左移k位,最右邊補k個0
    • 算術右移x>>k:右移k位并在最左端補k個最高有效位上的值
    • 邏輯右移x>>>k:右移k位,最左邊補k個0
    • 對有符號數采用算術右移,對無符號數采用邏輯右移
  • 整數表示
  • 信息=位+上下文
  • 無符號整數:B2U4[0011]=0·2^3+0·2^2+1·2^1+1·2^0=3
  • 有符號整數-補碼編碼:B2T4[1011]=-1·2^3+0·2^2+1·2^1+1·2^0=-5
  • 無符號數表示需加后綴字符u
  • 浮點數
    • 二進制小數
    • IEEE浮點表示
      • 表示:
        math V=(-1)^sM2^E
      • 符號s決定著這個數是負數(s=1)還是正數(s=0)
      • 尾數 M是一個二進制小數,n位小數字段f=fn-1…f1f0編碼尾數M
      • 階碼 E的作用是對浮點數加權,這個權重是2^E,e=ek-1…e1e0
      • 偏移常數
        math Bias = {2^k}{^-}{^1}-1
      • 32位浮點數:
      • 規格化的值
        • E=e-Bias M=1+f
      • 非規格化的值
        • E=1-Bias M=f
  • 數值運算
  • 無符號整數
    • 加法
      • 當發生溢出情況時,丟棄所溢出的最高位,所得到的結果是x + y (mod 2^w)
      • 公式
    • 乘法
      • 公式:
      • 在大多數機器上,整數乘法指令相當慢,常采用用移位和加法運算的組合來代替乘法運算
    • 除法:向下取整
      • x/2 實際上是x的位向量向右移1位
      • x/16 是x向右移4位
  • 補碼運算
    • 加法
    • 乘法
    • 除法:算術右移
  • 信息的存儲
  • 網絡字節序
    • 網絡上的數據流是字節流,收到的第一個字節被當作高位看待
    • 網絡字節序是大端字節序
  • 主機字節序和網絡字節序轉換
    • htons()把unsigned short類型從主機序轉換到網絡序
    • htonl() 把unsigned long類型從主機序轉換到網絡序
    • ntohs() 把unsigned short類型從網絡序轉換到主機序
    • ntohl() 把unsigned long類型從網絡序轉換到主機序

      其中 網絡net即n 主機host即h long(32位)即l short(16位)即s

  • 課下作業

    完成教材 p97 2.96 2.97,要有完備的測試

    2.96

  • 任務詳情
    • 遵循位級浮點編碼規則,實現具有如下原型的函數:
    /**Compute (int) f.*If conversion causes overflow or f is NaN, return*/ int float_f2i(float bits f);
    • 對于浮點數f,這個函數計算(int)f。如果f是NaN,你的函數應該向零舍人。如果f不能用整數表示(例如,超出表示范圍,或者它是一個NaN),那么函數應該返回0x800000000。
    • 測試你的函數,對參數f可以取的所有2^32個值求值,將結果與你使用機器的浮點運算得到的結果相比較。
  • 分析
    • NaN: not a number,表示“無效數字”。
    • 首先,看是否是浮點數且不超范圍,超過表示范圍,置為最大整數,若太小,不能化為整數,置為0。其次看符號 設置+,-號。如果是NaN,置為0x80000000
    • 函數形參為無符號型,輸入負數時和整數轉化不同,加了一行代碼打印當前輸入,負數時,將無符號轉化為浮點型解決
  • 代碼
  • #include <stdio.h> #include <math.h>typedef float float_bits;int float_f2i(float_bits f) { printf("your num is %f\n",f); if(f>=0&&f<=32767) return fabs(f); else if(f<0&&fabs(f)<32768) return -fabs(f); else return 0x80000000; } int main(){ float_bits i; scanf("%f",&i); printf("float_f2i is %d,(int) is %d\n",float_f2i(i),(int)i); return 0; }
  • 運行截圖
  • 2.97

  • 任務詳情
    • 遵循位級浮點編碼規則,實現具有如下原型的函數:
    /*Compute (float) i*/ float bits float_i2f(int i);
    • 對于函數i,這個函數計算(float) i的位級表示。
    • 測試你的函數,對參數f可以取的所有2^32個值求值,將結果與你使用機器的浮點運算得到的結果相比較。
  • 代碼
  • #include <stdio.h>#include <limits.h>typedef unsigned float_bits;float_bits float_i2f(int i){unsigned u = (unsigned)i;if(!u)return 0u;unsigned sign = u>>31;unsigned exp,frac,f;if(sign)u=(~u)+1;unsigned j,leftmost_one;for(j=0;j<32;j++){leftmost_one=u&(0x80000000>>j);if(leftmost_one)break;}exp = 158u-j;f = u<<j<<1;unsigned last_bit=(f&0x200)>>9;unsigned truncation = f&0x1ff;if(truncation<0x100)frac = f>> 9;else if(truncation >0x100)frac= (f>>9)+1;else{if(last_bit)frac = (f>>9)+1;elsefrac = f>>9;}if(frac >>23){++exp;frac=0;}return (sign<<31)|(exp<<23)|frac;}int main(){int i;unsigned r;float f,fr;for(i=INT_MIN;i<=INT_MAX;i++){r=float_i2f(i);fr=*((float*)&r);f=(float)i;if(fr == f)printf("%d:ok\n",i);else{printf("%d: %f %f error\n",i,f,fr);return -1;}}}
  • 運行截圖
  • 轉載于:https://www.cnblogs.com/besty-zyx/p/9733297.html

    總結

    以上是生活随笔為你收集整理的2018-2019-1 20165330 《信息安全系统设计基础》第二周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。