人们最常用的是十进制,但在计算机中为了物理实现的方便,采用的是二进制。
算法:小数部分乘2取整,直到乘积的小数部分为0时止,整数部分顺排。
计算机中常用的输入 / 输出设备(键盘、显示器、打印机)处理的数都是字符。
例如:英文的大小写字母(A-Z,a-z),数字符号(0-9)以及其他常用符号(%、+ 等)。
采用美国标准信息交换码(ASCII)对字符进行编码。
采用七位二进制编码来表示一个字符。该编码方案中共有128个字符。(27=128)
查询某个字符时,高位在前,低位在后,例如:
键盘输入“1”,实际写入键盘存储区的是 31H,即 00110001B。
键盘输入“A”,实际写入键盘存储区的是 41H,即 01000001B。
想要显示“0”,应把 30H 即 00110000B —> 显示存储区。
想要显示“F”,应把 46H 即 01000110B —> 显示存储区。
程序设计的需要,要求牢记以下相关字符的 ASCII 码:
在计算机中如何表示正负?
计算机只能识别0和1组成的数或代码,所以有符号数的符号也只能用0和1来表示;
即符号数值化,并作为数的一部分参与运算。
真值和机器数的概念:
数X的原码记作 [X]原 ,反码记作 [X]反 ,补码记作 [X]补
把最高位规定为符号位,数值部分对正数是其绝对值;
对于负数则是其绝对值按位取反(即1变0,0变1)。
正数的原码,反码,补码相同。
负数的数值位部分为其绝对值按位取反后末位加1所得。
某些处理的数据都是正数,最小数为0。可取消符号位,机器数的最高位是数值位。
机器数的物理意义是由程序员定的。
①机器数比真值数多一个符号位。
②正数的原、反、补码与真值数相同。
③负数原码的数值部分与真值相同;
负数反码的数值部分为真值数按位取反;
负数补码的数值部分为真值数按位取反末位加1。
④没有负零的补码,或者说负零的补码与正零的补码相同,都是 00000000。
⑤由于补码表示的机器数更适合运算,为此,计算机系统中负数一律用补码表示。
⑥机器数的数值范围(设机器数字长=n位,用来表示整数)
一个计量器的最大容量称为该计量器的“模”;
四位计数器能存 0000 ~ 1111 共 16 个数,模 = 24
八位计数器能存 0000,0000 ~ 1111,1111 共 256 个数,模 = 28
十六位计数器能存 0000,0000,0000,0000 ~ 1111,1111,1111,1111 共 65536 个数,模 = 216
设一个数的真值数值部分用X来表示,按照补码的编码规则,可以计算得到:[+X]补
对 [+X]补 按位取反末位+1,就得到 [-X]补
条件:
再看一道结果错误的例题。
由此可见,定字长的机器,表示的数值是有范围的,超出范围时的数据表示出错。
下列情况就发生了溢出:
8位加法器,运算无符号数,结果 >= 256;
8位加法器,运算有符号数,结果 > +127,<-128;
16位加法器,运算无符号数,结果 >= 65536
16位加法器,运算有符号数,结果 >215-1, <-215
注:某数是无符号数,还是有符号数,其物理意义是由程序员定义。
最高位的进位值保存在 “进位标志寄存器”(CF) 中。
如加数与被加数的最高位相同,却与结果的最高位相异,则将 “溢出标志寄存器” 置为 1,否则为 0。
如果参与运算的数是无符号数,则看 进位标志(CF),CF = 1,表示溢出错。
如果参与运算的数是有符号数,则看 溢出标志(OF),OF = 1,表示溢出错。
由于进位为 0 ,所以 CF = 0;
由于加数与被加数最高位相同,并且与运算结果的最高位相异,所以 OF = 1;
如果参与的运算的数是无符号数,则正确。
如果参与的运算的数是有符号数,则错误。
由于进位为 1,所以 CF = 1;
由于加数与被加数最高位相同,并且与运算结果的最高位相异,所以 OF = 1;
无论参与的运算数是无符号数还是有符号,由于 CF = 1,OF = 1,结果必然是错误的。