一、学习目标

1. 理解二进制在计算机中的重要地位
2. 掌握布尔运算在C语言中的应用
3. 理解有符号整数、无符号整数、浮点数的表示
4. 理解补码的重要性
5. 能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞
 

二、学习资源

(提示:可选项,如有其他相关资源请在此说明):

1. 教材:第二章《信息的表示和处理》,详细学习指导见

2. 课程资料:https://www.shiyanlou.com/courses/413   实验三,课程邀请码:W7FQKW4Y

3. 教材中代码运行、思考一下,读代码的学习方法见

 

三、学习方法

(提示:为提高学生的学习效果,请在此处为学生提出微课程学习的具体要求或建议)

 

1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第三周学习总结”


四、学习任务

(提示:请将要求学生完成的任务、测验或思考题列在此处)

1. 阅读教材,完成课后练习(书中有参考答案)

2. 考核:练习题把数据变换一下

3. 加分题:课后作业最多两人一组,互相不能重复,1星题目每人最多加一分,2星题目每人最多加二分,3星题目每人最多加三分,4星题目每人最多加四分。

 

、后续学习预告(可选):

教材第三章《程序的机器级表示》

、学习过程

第二章   信息的标识和处理

计算机存储和处理信息以二值信号表示。

三种最重要的数字表示法

无符号:基于传统的二进制表示法,大于等于0

补码:有符号整数

浮点数:实数的科学计数法的以二进制为基数的版本

缓冲区溢出漏洞:

计算机的表示法是用有限数量的位来对应一个数字编码,当结果太大不能表示时就会发生溢出。人为的溢出是有一定企图的,攻击者写一个超过缓冲区长度的字符串,植入到缓冲区这时可能会出现两种结果:一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。

2.1  信息的储存

1.存储器的每个字节都由唯一字节来标识,成为它的地址。所有可能地址的集合成为虚拟地址空间。其实现时间随机访问存储器(RAM)、磁盘存储器、特殊硬件和操作系统软件结合起来。

2.十六进制表示法

以0x或0X开头表示,字符A-F可大写可小写。

!掌握二进制和十六进制之间的转换,二进制四位与十六进制一位相对应。

小窍门:

3.字

字长:指明整数和指针数据的标称大小.字长决定的最重要的系统参数就是虚拟地址空间的最大大小。对一个字长为w位的机器,虚拟地址的范围为0-2^(w-1),程序最多访问2^w个字节。

4.数据大小

5.寻址和字节顺序

小端法:在存储器中按照从最低有效字接到最高有效字节的顺序存储对象;

大端法:在存储器中按照从最高有效字接到最低有效字节的顺序存储对象;

举例:变量x十六进制值为0x01234567,则:

6.表示字符串、代码

a-z的ASC||码为0x61-0x7A。

7.布尔代数

用0、1表示真假,以研究逻辑推理的基本原则。

有:~=NOT;&=AND;|=OR;^=异或。

8.C语言中的位级运算

!!确定一个位级表达式的结果最好的方法,就是将十六进制的参数扩展成二进制标识并执行二进制运算,然后再转换回十六进制。

9.C语言中的逻辑运算

有:||、&&、!,分别对应于OR、AND和NOT运算。

!注意:逻辑运算认为所有非零的参数都表示TRUE,而参数0表示FALSE。

10.C语言中的移位运算

右移运算:x>>k;左移运算:x<<k。

!对于无符号数据,右移必须是逻辑右移。对于有符号数据,则也可以使算术右移。

2.2整数表示

1. 无符号数编码

2.补码编码

3.扩展一个数字的位表示

零扩展——将一个无符号数转换为一个更大的数据类型,在开头添加0。

符号扩展——将一个补码数字转换为一个更大的数据类型,在表示中添加做高有效位置的副本。

4.截断数字

2.3整数运算

包括无符号加法、补码加法、补码的非、无符号乘法、补码乘法、乘以常数、除以2的幂。

1. 无符号加法是一种模运算形式。

2. 补码加法,两个数的w位补码之和与无符号之和又完全相同的位级表示。定义字长为w的、运算数x、y上的补码加法为:

因此,可以得出结论:

3. 补码的非

4. 无符号乘法

5. 补码乘法

6. 乘以常数

!!注意:无论是无符号运算还是补码运算,乘以2的幂都可能导致溢出。但即使溢出,通过移位得到的结果也是一样的。

7. 除以2的幂

除以2 的幂通过逻辑或者算术右移来实现。但这种方法不能推广到除以任意常数。

2.4浮点数

1.二进制小数

小数的二进制表示,二进制点左边的权形如2^i,而右边的数字的权形如1/2^i。

2.IEEE浮点表示

3.浮点运算

IEEE标准定义了一些合理规则。定义1/-0将产生-∞,而定义1/+0会产生+∞。

IEEE标准中指定浮点运算行为方法的一个优势在于,它可以独立于任何具体的硬件或者软件实现。

浮点加法不具有结合性,这是缺少的最重要的群属性;浮点加法满足了单调性属性——如果a>=b,那么对于任何a\b以及x的值,除了NaN,都有x+a>=x+b。无符号或补码加法不具有这个实数(和整数)加法的属性。

浮点乘法满足下列单调性:

4.C语言中的浮点数

所有的C语言版本提供了两种不同的浮点数据类型:float和double。在支持IEEE浮点格式的机器上,这些数据类型就对应于单精度和双精度浮点。

较新版本的C语言,包括ISO C99,包含第三种浮点数据类型long double。对于许多机器和编译器来说,这种数据类型等价于double数据类型。不过对于Intel兼容机来说,GCC用80位“扩展精度”格式来实现这种数据类型,提供了比标准64位格式大得多的取值范围和精度。

三种不同的浮点数据类型:float、double、long double(对于许多机器和编译器,与double等价)。

!当int、float和double格式之间进行强制转换时,程序改变数之和位模式的原则如下(假设int是32位的):

 

 

七、遇到的问题及解决

 

 

八、其他

(提示:此处由学生填写,灵感,领悟等)

 

Linux 读书笔记 三 (第二章)的更多相关文章

  1. linux读书笔记(5章)

    linux读书笔记(5章) 标签(空格分隔): 20135328陈都 第五章 系统调用 5.1 与内核通信 系统调用 让应用程序受限的访问硬件设备 提供创建新进程并与已有进程通信的机制 提供申请操作系 ...

  2. # linux读书笔记(3章)

    linux读书笔记(3章) 标签(空格分隔): 20135328陈都 第三章 进程管理 3.1 进程 进程就是处于执行期的程序(目标码存放在某种存储介质上).但进程并不仅仅局限于一段可执行程序代码( ...

  3. 【vue.js权威指南】读书笔记(第二章)

    [第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...

  4. Linux读书笔记1/2章

    linux的内核设计: 第一章 1.1Linux历史: 历经时间的考验,今天Unix已经发展成一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接.TCP/Ip网络的现代化操作系统. 1.2追寻Li ...

  5. 《深入理解java虚拟机》读书笔记一——第二章

    第二章 Java内存区域与内存溢出异常 1.运行时数据区域 程序计数器: 当前线程所执行的字节码的行号指示器,用于存放下一条需要运行的指令. 运行速度最快位于处理器内部. 线程私有. 虚拟机栈: 描述 ...

  6. Javascript高级程序设计读书笔记(第二章)

    第二章  在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...

  7. 《深入理解bootstrap》读书笔记:第二章 整体架构

    一.  整体架构   1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...

  8. Linux学习笔记 一 第二章 Linux系统安装

    Linux系统安装 一.首先安装VMware 虚拟机 下载网址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-e ...

  9. Linux读书笔记第五章

    主要内容: 什么是系统调用 Linux上的系统调用实现原理 一个简单的系统调用的实现 1. 什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使 ...

随机推荐

  1. NYOJ2—括号配对问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0<N<=1 ...

  2. 内部元素一一相应的集合的算法优化,从list到hashmap

    说是算法优化,基本上是在吹牛,仅仅只是算是记录下,我写代码时候的思路.毕竟还是小菜鸟. 我要开一个party,与会者都是情侣,可是情侣并非一起过来的,而是有先有后,可是每位与会者来的时候都拿着一束鲜花 ...

  3. 3DES加解密 C语言

    3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...

  4. Spring MVC 入门笔记

    主要名词解释 DispatcherServlet 前端控制器  相当于一个转发器 入口: protected void doDispatch(HttpServletRequest request, H ...

  5. jQuery----JQuery动画(hide()和show())(下)

    本文是对hide()和show()的进一步补充,其中不仅介绍回调函数,还有递归的相关知识点. 案例要求: 点击”隐藏动画“按钮,四个头像从后向前,每个以0.8秒的速度消失 点击”显示动画“按钮,四个头 ...

  6. Vue.js下载方式及基本概念

    Vue.js 简介 说明及下载 Vue.js使用文档已经写的很完备和详细了,通过以下地址可以查看: https://cn.vuejs.org/v2/guide/ vue.js如果当成一个库来使用,可以 ...

  7. goalng nil interface浅析

    0.遇到一个问题 代码 func GetMap (i interface{})(map[string]interface{}){ if i == nil { //false ??? i = make( ...

  8. PostgreSQL数据库表名的大小写实验

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  9. 可变多隐层神经网络的python实现

    说明:这是我对网上代码的改写版本,目的是使它跟前一篇提到的使用方法尽量一致,用起来更直观些. 此神经网络有两个特点: 1.灵活性 非常灵活,隐藏层的数目是可以设置的,隐藏层的激活函数也是可以设置的 2 ...

  10. 4543: [POI2014]Hotel加强版

    4543: [POI2014]Hotel加强版 链接 分析: f[u][i]表示子树u内,距离u为i的点的个数,g[u][i]表示在子树u内,已经选了两个深度一样的点,还需要在距离u为i的一个点作为第 ...