20135218姬梦馨——信息安全系统设计基础第三周学习总结
学习计时:共7小时
读书:2h
代码:0.5h
作业:2.5h
博客:2h
一、学习过程
(一)无符号
无符号(unsigned)编码基于传统的二进制表示法,表示 大于或者等于零的数字。
补码(two's-complement)编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字。
浮点数(floating-point)编码是表示实数的科学记数法 的以二为基数的版本。计算机用这些不同的表示方法实现算术运算,例如加法和乘法,类似于对 应的整数和实数运算。 当结果太大不能表示时会溢出,大量安全漏洞都是由于算数运算引发的.
(二)进制转换
在二进制表示法中,它的值域是000000002 ~ 111111112 ;如果用十进制整数表示,它的值域就是010 ~ 25510。十六进制(简写为"hex")使用数字'0'~'9',以及字符'A'~'F'来表示16 个可能的值。在C 语言中,以0x 或0X 开头的数字常量被认为是十六进制的值。字符'A'~'F'既可以是大写,也可以是小写,甚至是大小写混合。
(三)
每台计算机都有一个字长(word size),指明整数和指针数据的标称大小(nominal size)。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w 位的机器而言,虚拟地址的范围为0 ~ 2w-1,程序最多访问2w 个字节。
(四)小端法大端法
—最低有效字节在最前面的方式,称为小端法(little endian)。大多数Intel 兼容机都采用这种规则。
后一种规则—最高有效字节在最前面的方式,称为大端法(big endian)。大多数IBM 和Sun Microsystems 的机器都采用这种规则。注意我们说的是"大多数"。这些规则并没有严格按照企业界限来划分。
小端是"高对高、低对低",大端与之相反
(五)布尔代数
二进制值是计算机编码、存储、操作信息的核心(0、1)
逻辑运算——0或1
位运算————位向量
(六)整数表示
数据类型long long是在ISO C99中引入的。(编译:gcc -std=c99)。
64位机器用8个字节表示;32位机器用4个字节表示。
*负数的范围比整数的范围大1。
(七)补码
最常见的有符号数的计算机表示方式。
正数的补码=原码
负数的补码=原码各位取反再加1
最高有效位也叫符号位。
(八)无符号数与有符号数转换
强制类型转换的结果保持位值不变,改变解释这些位的方式。
处理同样字长的有、无符号数之间相互转换的规则:数值可能会变,但是位模式不变。(底层的位表示保持不变)
(九)扩展数字的位表示
零扩展:在开头添0。(将无符号数转换成更大的数据类型)
符号扩展:添加最高有效位的值的副本。(一个补码数字转换成更大的数据类型)
(十)截断数字
可能会改变数值——溢出的一种形式。
对于无符号数字x,截断到k位,相当于计算:x mod 2(k)。(k次幂)
(十一)IEEE浮点表示
符号:s决定这个数是负数(s = 1)还是正数(s = 0),而对于数值0的符号位解释作为特殊情况处理。
尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。
阶码:E的作用是对浮点数据加权,这个权重是2的E次幂(可能是负数)。
向偶数舍入(默认)、向零舍入、向下舍入、向上舍入。
二、课程总结
这次学习了用各类方法来表示基本的数据类型,再操作这些数据。
关于位模式的问题,一开始不是很清楚,关于强制转换也不能完全理解。后来再对位模式有了彻底的了解之后,知道了数字串无论什么进制都可以看做是进制的一种位模式,