2019-2020-1 20175223 《信息安全系统设计基础》第2周学习总结

目录


教材学习内容总结

  • 第一周要点:
    • 要点1:TCP/IP协议族简介;
    • 要点2:正则表达式基础;
    • 要点4:教材第二章。

  • 教材第二章 “信息的表示和处理” 要点:
    • 要点1:信息存储:
      • 大端法与小端法;
      • 整形与浮点型对同一数值的格式;
      • 布尔代数:& , | , | , ^
    • 要点2:C语言中的运算:
      • 位级运算:布尔运算、掩码运算;
      • 逻辑运算:&& , || , !
      • 移位运算:逻辑左移、逻辑右移(无符号数)、算数右移(有符号数);
    • 要点3:整数表示:
      • 无、有符号数编码;
      • 有符号数原码、反码表示;
      • 有、无符号数之间的转换
      • 扩展、截断数字;
    • 整数运算:
    • 浮点数:
      • 二进制小数;
      • 舍入;
      • 舍入;
      • 浮点运算;
      • C语言中的浮点数。


教材学习中的问题和解决过程

1. 什么是位模式?

  • 问题回答:
    计算机中所有二进制的0、1代码所组成的数字串。在位模式中,从右向左每位有一个固定的权值,相邻位之间权是一个固定的比例关系。

2. 对于 有符号数和无符号数之间的转换 的理解

在转换时, 位模式中每一位的数值是一样的、不改变的;改变的是最高位(有符号数符号位、无符号数最高有效位)的权值。

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] ,此时是溢出。

运行如下实例:

# 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/YogileOne

2019-2020-第1学期\subject_5_Cpt_System

  • 代码提交过程截图:

  • 代码量截图:



学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 20篇 280小时
第一周 66/66 1/1 24/24
第二周 427/493 2/3 25/49
  • 计划学习时间:16小时

  • 实际学习时间:25小时


参考资料

posted @ 2019-09-29 10:51  Yogile  阅读(230)  评论(0编辑  收藏  举报