Ⅱ.数据的机器级表示
章节导论:
2.1 位和数据类型
2.1.1 信息最小单位-位(0和1)(如高电压(0.9-1.1v)和低电压(0.0-0.2v))
2.1.2 数据类型
2.2 整数
2.2.1 无符号整数
位置计数法:通过各个位置的数字不同的权重来表示一个数字
如286=2*102+8*101+6 ,在这个十进制系统中基数为10,同理,二进制系统基数为2
2.2.2 有符号整数
如何表示负数?将k位的2^k个不同的数字分成两半,一半表示正数,另一半表示负数,下图以k=4为例(最高位当成符号位)
(反码可理解为按位取反)
但实际上用原码、反码表示在列竖式时都会出现问题,故采用补码表示
实际输入进行处理时,要确保A+-A=0,比如0101(5)+(1011)(-5)=0000/10000(0)首位的1被忽略
2.2.3 二进制补码整数
补码通俗换算方法:将k位分成第一位(表示负数的大小/有无)和后面的k-1位(表示正数的大小)
原码怎么找到补码:取反(找到反码),再加一
2.2.4二进制-十进制转换
注:k位的二进制可表示的最大正数是2(k-1)-1,最小负数是-2k
2.2.5 算术运算
符号扩展:执行两个不同位数的数的加法运算,比如0000 0000 0000 1110+1100 要把1100扩展成16位数。此时遵循一个准则,如果是负数,就在前面加上很多个1,如果是正数,就加0(负数可理解为非首位的0计算完数值后+1再取反)
溢出:当两个符号相同的数相加,产生的和符号与之不同,则表明结果溢出
两个符号不同的数相加永远不会溢出
2.3浮点数
位的权重变成负,如某一位的权重是2^-4;负数的补码表示同整数
浮点数的表示:一位表示符号,另一些位表示数值,再用余下的位表示精度(如float的表示方法)
(注:指数偏移值是1-254时,要-127;指数偏移值是0时,实际指数是-126,指数偏移是255时,如果符号位为0,分数域为0,表示正无穷,符号位为1,分数域全为0,则表示负无穷,如果分数域不全为0,则表示非数值(NaN)
浮点数十进制转化成二进制:×2取整
举一个实际的例子
(先写成二进制的形式本质是找到这个数是2的多少次方,可以确定指数的大小!如果可以直接看出是2的多少次方就可以只看小数了!)
(浮点数转换成十进制数的时候不要忘了1!)
2.4 十六进制表示法(前缀为x
)
把二进制每四个位整合起来形成十六进制的一个位,A表示10,以此类推,F表示15。16进制转换成10进制要先转化成2进制(读每个位的不同含义)
2.5 ASCII
键盘上的每个键都对应唯一的ASCII码,需要用8个二进制位表示,如数字1是00110001(49)A是65,a是97(差值为32)
2.6 c语言中的数据类型和二进制表示
2.6.1 c语言中的数据类型
c语言支持三种基本数据类型int,char,douoble int类型采用二进制补码整数表示,char类型用ASCII码表示,double类型采用双精度浮点数表示