《信息安全系统设计基础》第03周学习总结
教材内容总结
三种最重要的数字表示:
1.无符号:基于传统的二进制方法,表示大于等于0的数字
2.补码(有符号数):表示有符号数整数的最常见方法,有符号整数就是可以为正或者负的数字
3.浮点数:表示实数的科学计数法的以2为基数的版本
·进制转换:用二进制做中间结果就会好转换
·对于一个字长为w位的机器,虚拟地址的范围为0~2的w次-1,程序最多访问2的w次方个字节。现在机器的字长一般是32位或者64位。
·c语言支持整数和浮点数的多种类型
·gcc -m32 可以在64位机上生成32位的代码
·小端法:最低有效字节在最前面,(高对高,低对低)。大多数Intel兼容机采用
·大端法:最高有效字节在最前面,(高对低,低对高)。大多数IBM和Sun Microsystems的机器采用
·双端法:将其配置成作为大端或小端的机器运行。许多比较新的微处理器采用
·逻辑运算(结果是0或1)的符号是和c语言的位级运算(结果是位向量)使用的符号相匹配的。
位向量的运算可以定义成参数的每个对应元素之间的运算
·位向量掩码:有选择的使能或是不能屏蔽一些信号。(可以用特定位置1或者清零)
·EXCLUSIVE-OR:异或
·逻辑右移:在左端补k个0
算数右移:在左端补k个最高有效位的值
无符号数:必须逻辑右移
有符号数:几乎所有机器都使用算数右移,但是逻辑右移也是可以的
Java中:x>>k(算数右移k) x>>>k(逻辑右移k)
·用C99中的“long long”类型时,编译要用 gcc -std=c99
·补码:利用补码表示有符号数,也是简化了运算,所有的运算都可用加法器实现。
在补码中,将字的最高有效位解释为负权
·补码的范围是不对称的:|TMin|=|TMax|+1
·补码的最高位是符号位,用带向左箭头的条表示。无符号数的最高有效位有正权重,用带向右箭头的条表示
·无符号数与补码相互转换结果:在0<=x<2的w次方-1范围内,T2Uw(x)=x和U2Tw(x)=x。对于这个范围之外,转化需要加上或减去2的w次方
·要创造一个无符号常量,必须加上后缀字符‘U’或者‘u’
·无符号数与有符号数之间的转换原则是底层的位表示不变
·零扩展:将一个无符号数转换为一个更大的数据类型,在表示的开头添加0
符号扩展:将一个补码数字转化为一个更大的数据类型,在表示中添加最高有效位的值的副本
·两个数的w位补码之和与无符号之和有完全相同的位级表示
·对于无符号和补码乘法来说,乘法运算的位级表示都是一样的
·二进制小数:小数点左边的数字的权是10的非负幂,得到整数值,小数点右边的数字是10的负幂,得到小数值
·IEEE浮点表示:给定了位表示,根据exp的值,被编码的值分为三种不同情况:
①规格化的值 ②非规格化的值 ③特殊值
·IEEE提供最常见精度是单精度和双精度
教材学习过程中遇到的问题与解决办法
1.P28页代码不全,需要我们自己编译一个main函数:
代码运行结果: