Download presentation
Presentation is loading. Please wait.
1
计算机的数制、码制及其运算 2010赛前知识点梳理
2
进制 1、回顾基本知识点 2、加深——负进制
3
常见的数制 数制:指用一组固定的符号和统一的规则来表示数的方法,也称计数制。 进位计数制:按进位的方法进行计数,如十进制、二进制等
进位计数制包括三个要素:数位、基数、位权 ①、数位:指数中各数字的位置(从右到左,0位开始); ②、基数:指进位计数制中数字。 ③、位权:某位上数字所代表的数值大小等于该数字乘以一个固定的数,这个固定的数就是这个数位的位权。如十进制百位上就是10^2 10(∵十进制有0~9共10个数字) 数位 …… 百位 十位 个位 · 十分位 百分位 千分位 ……
4
常见进位计数制的三要素基本情况如下 十进位计数制 二进位计数制 八进位计数制 十六进位计数制 数位
…… 百位 十位 个位 · 十分位 百分位 千分位 …… 基数 10(∵十进制有0~9共10个数字) 位权 …… · …… 二进位计数制 …… 第2位 第1位第0位 · 第1位 第2位 第3位 …… 2(∵二进制有0~1共2个数字) …… · …… 八进位计数制 …… 第2位 第1位 第0位 · 第1位 第2位 第3位 …… 8(∵二进制有0~7共8个数字) …… · …… 十六进位计数制 16(∵十六进制有0~9、A~F共16个数字) …… · ……
5
常见的数制及在计算机中的应用 D B O H 书写 -17.25(10)或-17.25D或(-17.25)10
十进制 D 数字 0、1、2、3、4、5、6、7、8、9 规则 逢十进一 应用 在计算机中常作为数据的输入和输出 书写 -17.25(10)或-17.25D或(-17.25)10 二进制 B 0、1 逢二进一 在计算机中用于数据的存储和运算 (2)或 B或( )2 八进制 O 0、1、2、3、4、5、6、7 逢八进一 在计算机中弥补二进制数书写位数过长的不足 (8)或 O或( )8 十六进制 H 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 逢十六进一 -2A5.67(16)或-2A5.67H或(-2A5.67)16
6
二进制简写是B,十六进制的简写是H,八进制简写是O和十进制的简写D
binary 二进制 B octal 八进制 O decimalist 十进制 D hex 十六进制 H 都是取的第一个字母
7
begin writeln(5 shr 1); writeln(5 shl 1); end. 二进制的算术运算 1、加法运算规则:
0+0= =1 1+0=1 1+1=10 2、减法运算规则: 0-0=0 0-1=1(向高位借1) 1-0=1 1-1=0 3、乘法运算规则: 0×0=0 0×1=0 1×0=0 1×1=1 说明:*2相当于小数点向右移如1101*2=11010 /2相当于小数点向左移 如1101/2=110.1 正如56*10=560 56/10=5.6 begin writeln(5 shr 1); writeln(5 shl 1); end. 2 10
8
进制转化
9
十进制整数与N进制整数之间的转换
10
十进制纯小数与N进制纯小数之间的转换 十进制纯小数与N进制纯小数之间的转换
小结:乘N取整法,就是用要转换的十进制纯小数乘以N,然后将积的整数部分提出来,并用余下的纯小数再乘以N,如此循环,直到余下的纯小数为0。
11
如何按权展开
12
N进制整数──→十进制整数
13
N进制纯小数──→十进制纯小数
14
到这已经可以应对一般题目,如果想更轻松些,可以继续看一些技巧性的知识
二进制的缺点:读写不方便。有时又引进八进制或十六进制来方便描述。因为8是2 的3次方,所以三位二进制跟一位八进制相对应;同样四位二进制跟一位十六进制相对应。
16
16 16
17
实用技巧 二进制度可以和八与十六进制直接互相转化 请同学们仔细观察 1967=(7AF)16 =(11110101111)2
=(3657)8 那么在做这类运算的时候我们可以抓住上面的特点进行运算,这样可以大大减少我们的运算量 二进制的缺点:读写不方便。有时又引进八进制或十六进制来方便描述。因为8是2 的3次方,所以三位二进制跟一位八进制相对应;同样四位二进制跟一位十六进制相对应。
18
历届试题 (13tg)(2070)16 + (34)8 的结果是( )。 A.(8332)10 B.(208C)16
C.( ) D.(20214)8 (12tg) 与十进制数 对应的八进制数是( )。 A B C D E. 前 4 个答案都不对 (11tg) (3725)8 + (B)16的运算结果是( )。 A. (3736)8 B. (2016)10 C. ( )2 D. (3006)10 E. (7E0)16 (10tg)十进制数 等值于二进制数( )。 A B C D E (9tg)十进制数2003等值于二进制数( )。 A) B) C) D) E) ABD A BCE BCD BCD
19
进制转换的程序实现
20
十进制正整数转换成任意n进制数 [算法描述] 设十进制数为y,要转换成n进制,用数组a存放最后的转换结果,i为数组下标,则算法描述如下:
重复做: i:=i+1; a[i]:=y mod n y:= y div n 直到y=0为止。 依次输出最高位a[i]到最低位a[1]。
21
将十进制整数Y转换成任意n进制数(设n<10)。 Program ex1(input,output);
var a: array [1..100] of integer; n,y,i,j:longint; begin readln(y,n); write('(',y,')10=','('); i:=0; repeat i:=i+1; a[i]:=y mod n; y:=y div n; until y=0; for j:=i downto 1 do write (a[j]); writeln(')',n); readln end. [程序样例] 输入:245 8 输出:(245)10=(365)8 思考: 如果n超过了10,比如要转换成十六进制数,可以用字符A、B、C、D、E、F分别表示数10~15,转换方法一样,只要在输出时把余数转换为字符(A~ F)即可
22
十进制转换K进制 function dectok(x,k:longint):string; const alph=' ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var st:string; begin st:=''; while x<>0 do st:=alph[x mod k+1]+st; x:=x div k; end; exit(st);
23
K进制转换十进制 function ktodec(st:string; k:longint):longint; const alph=' ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var i,j,ans:longint; begin ans:=0; j:=1; for i:=length(st) downto 1 do ans:=ans+j*(pos(st[i],alph)-1); {分出系数,位置-1} j:=j*k;{k 为进制,累乘得出某位上的权} end; exit(ans);
24
不同进制数之间实数转换的通用程序。 输入n进制的数m与要转换的p进制的输出。 如:输入一个数m : abc.cba
输入此数的进制n : 16 输入要转换成的数的进制p : 2 输出:ABC.ABC(16)= (2) program p12_5a; type ss=string[30]; var m,m1,a,s:ss; m0,n,p,i,j,t,s1,x:integer; mm,d:longint; mr:real; procedure zhuan(ch:char); {过程—数字符转换成数} begin j:=ord(ch)-48; {数字符转换成数} if ch in ['a'..'f'] then j:=j-7; {数字符转换成数} if (j<0) and (j>=n) then {出界输出出错信息,程序终止} begin writeln('data errer !'); readln; exit end; end; procedure xiao(m:ss); {过程—小数部分的转换} mr:=0; m0:=length(m); t:=n; {初始化} if n=10 then val(m,mr,t) else {如是十进制数,就直接把数串转换成数} for i:=2 to m0 do begin {否则把m,先转换成十进制小数,m[1]是小数点} zhuan(m[i]); {调用字符转为数的过程} mr:=mr+ j/t; t:=t*n {按权一一展开,累加到mr中} m:=''.''; {再把mr转换成p进制的数串}
25
while mr>0.00001 do begin {精度要求5位小数}
mr:=mr*p; x:=trunc(mr); {用乘p取整法,取出一位整数} m:=m +s[x+1]; mr:=mr-x; {按顺序一一连入m中} end; write(m) {输出p进制的数串m} begin s:='' abcdef''; {s字符串用以对应数制用} write('input m : '); readln(m); {输入原数} write('input n : '); readln(n); {输入原数的进制} write('input p : '); readln(p); {输入要转换成的数的进制} m0:=length(m); for i:=1 to m0 do m[i]:=upcase(m[i]);{转成大写} write(m,'(',n,') = '); {输出要转换的原数及其进制} x:=pos('.',m); {找出小数点的位置。如没有小数点x为0} if x<> {如有小数部分,就把小数(m1)与整数(m)分离} then begin m1:=copy(m,x,m0); m:=copy(m,1,x-1) end; t:=1; mm:=0; m0:=length(m); {先做整数部分的转换} if n<>10 then {把数串m转换成十进制数mm} for i:=m0 downto 1 do begin zhuan(m[i]); {调用字符转为数的过程} mm:=mm j*t; t:=t*n {按权一一展开,累加到mm中} end else val(m,mm,t); {如是十进制就直接把数串转成数}
26
if p<>10 then begin {再把mm转换成p进制的数串}
while mm>0 do begin {反序累加到m中} m:=s[mm mod p +1] m; mm:=mm div p end; end else str(mm,m); {如mm是十进制数就直接转成数} if m<>'0' then write(m); {先输出整数部分转换的结果} if x<>0 then xiao(m1); {如有小数部分,就调用过程xiao} writeln('(', p,')'); readln {最后输出要转换成的数制信息} end.
27
调试通过 program p12_5a; type ss=string[30]; var m,m1,a,s:ss;
m0,n,p,i,j,t,s1,x:integer; mm,d:longint; mr:real; procedure zhuan(ch:char); begin j:=ord(ch)-48; if ch in ['a'..'f'] then j:=j-7; if (j<0) and (j>=n) then begin writeln('data errer !'); readln; exit end; end; procedure xiao(m:ss); mr:=0; m0:=length(m); t:=n; if n=10 then val(m,mr,t) else for i:=2 to m0 do zhuan(m[i]); mr:=mr+j/t; t:=t*n m:='.'; while mr> do mr:=mr*p; x:=trunc(mr); m:=m+s[x+1]; mr:=mr-x; write(m) s:=' abcdef'; write('input m : '); readln(m); write('input n : '); readln(n); write('input p : '); readln(p); m0:=length(m); for i:=1 to m0 do m[i]:=upcase(m[i]); write(m,'(',n,') = '); x:=pos('.',m); 调试通过 if x<>0 then begin m1:=copy(m,x,m0); m:=copy(m,1,x-1) end; t:=1; mm:=0; m0:=length(m); if n<>10 then for i:=m0 downto 1 do begin zhuan(m[i]); mm:=mm+j*t; t:=t*n end else val(m,mm,t); if p<>10 then begin m:=''; while mm>0 do begin m:=s[mm mod p+1]+m; mm:=mm div p end; else str(mm,m); if m<>'0' then write(m); if x<>0 then xiao(m1); writeln('(', p,')'); readln end.
28
利用3位二进制数与1位八进制数对应,4位二进制数与1为十六进制数对应的方法。编写八进制数或十六进制数转换为二进制数,二进制数转换成八进制数和十六进制数的通用程序(仅在整数范围)。
如: 输入一个数m : ABC 输入此数的进制n : 16 输出: ABC(16)= (2) 又如输入一个数m : 输入此数的进制n : 2 输出: (2)=ABC(16)=5274(8)
29
if not f then begin writeln(''data error !''); readln; exit end;
program p12_5b; const s0=[''0''..''9'',''a''..''f'']; c:array [0..15] of string[4]=(''0000'',''0001'',''0010'',''0011'',''0100'',''0101'', ''0110'',''0111'',''1000'',''1001'',''1010'',''1011'',''1100'',''1101'',''1110'',''1111''); c0:array [1..7] of string=(''1'',''10'',''11'',''100'',''101'',''110'',''111''); var i,j,k,n,l:integer; f:boolean; s,s1,ss:string; ch:char; begin ss:='' abcdef''; readln(s); ‘输入一个数串 repeat readln(n) ‘输入一个此数串进制 until n in [2,8,16]; l:=length(s); i:=1; f:=true; while (i<=l) and f do begin ‘检测数串 ch:=upcase(s[i]); write(ch); if n=16 then if not(ch in s0) then f:=false; ‘如f为假输出出错信息 if n=8 then if not(ch in [''0''..''7'']) then f:=false; if n=2 then if not(ch in [''0'',''1'']) then f:=false; i:=i 1; end; write(''('',n,'') = ''); if not f then begin writeln(''data error !''); readln; exit end; case n of ‘分情况处理 2:begin ‘输入的是二进制数 i:=1; j:=l mod 4; ‘按每四位分,取余数j while i s1:=copy(s,i,j); ‘取出子串
30
if j<4 then ‘头一个子串因前面没有无用的0的,转换时分别处理
for k:=1 to 7 do if s1=c0[k] then write(k) else else ‘以后的子串每四位对应一个十六进制数 for k:=0 to 15 do if s1=c[k] then write(ss[k 1]); i:=i j; j:=4; ‘除头一个子串外,以后按每四位截取 end; write(''('',16,'') = ''); ‘十六进制数输出结束 i:=1; j:=l mod 3; ‘按每三位分, 取余数j while i s1:=copy(s,i,j); if j< ‘头一个子串因前面没有无用的0,转换时分别处理 then for k:=1 to 7 do if s1=c0[k] then write(k) else else for k:=0 to 7 do if s1=copy(c[k],2,4) then write(ss[k 1]); i:=i j; j:=3; ‘除头一个子串外,以后按每三位截取 end; writeln(''('',8,'')''); ‘八进制数输出结束 end; 8,16: ‘输入的是八或十六进制数 for i:=1 to l do begin ch:=upcase(s[i]); j:=ord(ch)-48; ‘先转成大写,再转成对应的数 if ch in [''a''..''f''] then j:=j-7; if i=1 ‘头一个数转换成二进制数,前面无用的0不输出 then if ch in [''1''..''7''] then write(c0[j]) else write(c[j]) else if n=16 then write(c[j]) ‘转成十六进制数 else write(copy(c[j],2,4)) ‘转成八进制数 end if n in [8,16] then writeln(''('',2,'')''); readln end.
31
1 -1 2 -2 begin writeln( 5 mod 2); writeln( -5 mod 2);
end. 1 -1 mod 结果的符号同被除数相同 begin writeln( 5 div 2); writeln( -5 div 2); writeln( 5 div -2); writeln( -5 div -2); end. 2 -2 div结果的符号同被除数与除数都有关
32
在负进制数中是用-R作为基数,例如-15(十进制)相当于110001(-2进制),并且它可以被表示为2的幂级数的和数:
110001=1*(-2)5+1*(-2)4+0*(-2)3+0*(-2)2+0*(-2)1 +1*(-2)0 设计一个程序,读入一个十进制数和一个负进制数的基数, 并将此十进制数转换为此负进制下的数:-R∈{-2,-3,-4,...,-20} 输入文件jzzh.in:输入的每行有两个输入数据。第一个是十进制数N(-32768<=N<=32767);第二个是负进制数的基数-R。 输出文件jzzh.out:输出此负进制数,若基数超过10,则参照16进制的方式处理。 样例: 输入1 30000 -2 输出1 11011010101110000 输入2 -25000 -16 输出2 7FB8
33
1 1 1 0 0 16 -8 4 -2 1 十进制12转化为-2进制 12/(-2)=-6...0 (-6)/(-2)=3...0
3/(-2)=(-1)...1 (这里特别注意,不能商(-2),否则余数会变成(-1)) (-1)/(-2)=0...1 (同上,余数不为负数) 1/(-2)=0...1 11100 (-2)^4 (-2)^3 (-2)^2 (-2)^1 (-2)^0 -1- (-2)=1 负数进制一样。每次取的余数保证在0~-m-1之间。(例如m=-16,则余数应该在0~15)就可以直接输出。所以用系统的“mod”运算符的时候必须注意检查是不是在该范围(可能在m+1~0),否则就调整。调整的方法是:if 余数<0 thenbegin 余数=余数-m; 商=商+1;end;
34
const maxn=50; ch:string[20]=' ABCDEFGHIJ'; var i,j,n,m,k:longint; bit:array[0..maxn] of longint; begin while not eof(input) do readln(n,m); i:=0; k:=n; while (k<0)or(k>=-m) do bit[i]:=k mod m; k:=k div m; if bit[i]<0 then begin bit[i]:=bit[i]-m; k:=k+1; end; inc(i); end; bit[i]:=k; for j:=i downto 0 do write(ch[bit[j]+1]); writeln; end.
35
Noip 2000 提高組 解題報告 题一 进制转换 负进制的转换。一定可以用数学方法推导出公式来的,但我是直接模拟的。如果余数是负的,就减去r(r<0)并Inc(商)。 源程序: program kk; const g:array[0..20]of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'); var n,r,i,j,x,k,top:longint; a:array[ ]of char; begin assign(input,'t1.in'); reset(input); assign(output,'t1.out'); rewrite(output); while not eof do begin readln(n,r); top:=0; write(n,chr(61)); while n<>0 do begin k:=n mod r; x:=n div r; if k<0 then begin k:=k-r; inc(x); end; inc(top); a[top]:=g[k]; n:=x; end; for i:=top downto 1 do write(a[i]); writeln(chr(40),'base',chr(32),r,chr(41)); end; close(input); close(output); end.
36
穷举法 N=4 r=2 a[3] a[2] a[1] var i,m,n,r,s:longint;
a:array[1..100] of longint;{保存-R进制数} begin readln(n,r); r:=-r; m:=1;{记录位数} for i:=1 to 100 do a[i]:=0; a[1]:=-1; ;{放置-1,以便可以在后面的穷举中从0开始} repeat a[1]:=a[1]+1 ;{从0开始逐一穷举-R进制数} i:=1; {处理进位} while a[i]=r do a[i]:=0; i:=i+1; a[i]:=a[i]+1 end; if i>=m then m:=i;{修正位数} s:=0; for i:=m downto 1 do s:=s*(-r)+a[i]{算出对应的十进制数} until n=s; for i:=m downto 1 do if a[i]<=9 then write(a[i]) else write(chr(a[i]+55)); end. N=4 r=2 a[3] a[2] a[1]
37
信息存储
38
计算机中信息的编码 在计算机中,各种信息都是以二进制编码的形式存在的;也就是说,不管是文字、图形、声音、动画,还是电影等各种信息,在计算机中都是以0和1组成的二进制代码表示的; 计算机之所以能区别这些信息的不同,是因为它们采用的编码规则不同。比如:同样是文字,英文字母与汉字的编码规则就不同,英文字母用的是单字节的ASCII码,汉字采用的是双字节的汉字内码;但随着需求的变化,这两种编码有被统一的UNICODE码(由Unicode 协会开发的能表示几乎世界上所有书写语言的字符编码标准)所取代的趋势;当然图形、声音等的编码就更复杂多样了。这也就告诉我们,信息在计算机中的二进制编码是一个不断发展的、高深的、跨学科的知识领域
39
信息的存储 信息:数值、文字、语音、图形和图象。 数据:分两类 1.数值数据:如+15、-17.6 2.字符数据:如 字母(A、B……)
符号(+、&……) 汉字 计算机内部采用二进制表示信息。
40
知识点介绍 =27+ 24+ 22+ 20 =149 K 字节 1K = 1024 Byte M(兆)字节 1M = 1024 K
信息的存储单位 位(Bit):度量数据的最小单位 字节(Byte):数据存储的基本单位 b7 b6 b5 b4 b3 b2 b1 b0 = =149 K 字节 1K = 1024 Byte M(兆)字节 1M = 1024 K G(吉) 字节 1G = 1024 M T(太)字节 1T = 1024 G
41
拓展 千,1KB=2的10次方=1024B, 兆,1MB=2的20次方=1024*1024B=1024KB, 吉,1GB=2的30次方=1024*1024*1024B=1024MB, 太,1TB=2的40次方=1024*1024*1024*1024B=1024GB, 拍,1PB=2的50次方=1024*1024*1024*1024*1024B=1024TB, 艾,1EB=2的60次方=1024*1024*1024*1024*1024*1024B=1024PB, 泽,1ZB=2的70次方=1024*1024*1024*1024*1024*1024*1024B=1024EB, 尧,1YB=2的80次方=1024*1024*1024*1024*1024*1024*1024*1024B=1024ZB
42
字符的存储 、 数值 十/二进制转换 西文 ASCII 码 汉字 输入码/机内码转换 声音、图像 模/数转换 二/十进制转换 西文字形码
汉字字形码 数/模转换 内存 输入设备 输出设备 声音 、 图像
43
计算机在处理数据时,要考虑到小数点的位置。如果将小数点固定在某一位置,则称为定点表示;如果小数点可以任意移动,则称为浮点表示。
一、数的定点和浮点表示 计算机在处理数据时,要考虑到小数点的位置。如果将小数点固定在某一位置,则称为定点表示;如果小数点可以任意移动,则称为浮点表示。 1.数的定点表示法——定点小数和定点整数 ⑴定点小数格式:小数点的位置固定在最高数据位的左边,小数点前面再设一位符号位。 任何m位二进制小数在计算机中用m+1位二进制表示。 由于小数点总是在符号位与最高数据位之间,因此在计算机中不明确表示出来
44
⑵定点整数格式:小数点位置固定在最低数据位的右边。
整数又分为带符号和不带符号的两类。 带符号的整数,符号位安排在最高(最左)位。 由于小数点固定在最低数据右边,因此在计算机中不明确表示出来。n位带符号整数N=NsNn-1…Nn-2N1N0在计算机中用n+1位二进制表示。 对于不带符号的整数,把所有n+1位二进制位全部视为数值。 在不同计算机中,使用多种位数的整数。16位,32位,64位,64位二进制来表示一个整数。
45
2.数的浮点表示法 浮点数是指小数点数据中的位置可以左右移动的数。一个数N要用浮点数表示可以写:N=M*RE M:浮点数的尾数。E:浮点数的指数或阶码。 R:浮点数的基数,是常数一般取2、8或16 一旦机器的浮点部件设计好了,基数的大小也就确定了,不能再改变了,基数在浮点数表示中不出现,是隐含的。 ⑴浮点数的表示方法: M:尾数。用定点小数表示,表示浮点数的有效位,其位数 n的大小决定了浮点数的精度。 E:阶码。用定点整数表示。阶码用于表示小数点在浮点数中的位置。其位数m的大小反映此浮点数所能表示的数的范围。
46
西文字符的存储 知识点介绍 西文字符编码——ACSII码(美国国家标准信息交换码)
American Standard Code for Information Interchange 用 8 个二进制位 ( 1 个字节 ) 表示 1 个字符。 7位版本: ( – )。 数字0-9、英文大小写字母、键盘上的字符、控制码 8位版本: ( – ) 。 扩充 ASCII 码 各国语言的字符代码
48
ASCII控制字 十进制 代码 含义 00 NUL 空 01 SOH 标题开始 02 STX 正文开始 03 ETX 正文结束 04 EOT 传输结否 05 ENQ 询问 06 ACK 确认 07 BEL 响铃 08 BS 退格 09 HT 横向列表 10 LF 换行 11 VT 纵向列表 12 FF 换页 13 CR 回车 14 SO 换档(Shift-Out) 15 SI 换档(Shift-In) 16 DLE 数据链扩展 17 DC1 设备控制1 18 DC2 设备控制2 19 DC3 设备控制3 20 DC4 设备控制4 21 NAK 不确认 22 SYN 同步字符 23 ETB 传输块结否 24 CAN 作废 25 EM 介质结束 26 SUB 置换 27 ESC 扩展 28 FS 文件分隔符 29 GS 组分隔符 30 RS 记录分隔符 31 US 单位分隔符
49
二、汉字编码 汉字系统对每个汉字预先规定输入计算机中的代码,即汉字的外部码(例如拼音输入码)。计算机为了识别汉字,要把汉字的外部码转换成内部码(二进制代码)进行存储和处理。输出时,还将汉字的内部码转换成汉字的字形码。计算机处理汉字的总过程如下: 汉字输入、汉字储存与交换、汉字输出 外部(输入)码 → 机内码 → 字形(输出)码
50
中文字符的存储 知识点介绍 汉字输入码(即汉字的外部码) 输入码 国标码 机内码 字形码 内码 外码 输出码 数字编码 ——
汉字输出 汉字输入码(即汉字的外部码) 数字编码 —— 拼音编码 —— 全拼、双拼、微软拼音、自然码和智能ABC等 字形编码 —— 五笔字型法、、表形码、郑码输入法等 国标区位码
51
1、汉字输入码 汉字输入码也称外码,是为了将汉字输入计算机而编制的代码,是代表某一汉字的一串键盘符号。 汉字输入码种类:
数字编码:如区位码、国标码、电报码等。 拼音编码:如全拼码、双拼码、简拼码等。 字形编码:如王码五笔、郑码、大众码等。 音形编码:如表形码、钱码、智能ABC等。
52
汉字内码 汉字信息在计算机内部也是以二进制方式存放。由于汉字数量多,用一个字节的128种状态不能全部表示出来,因此在1980年我国颁布的《信息交换用汉字编码字符集——基本集》,即国家标准GB 方案中规定用两个字节的十六位二进制表示一个汉字。 每个汉字或图形符号分别用两位的十进制区码(行码)和两位的十进制位码(列码)表示,不足的地方补0,组合起来就是区位码。把区位码按一定的规则转换成的二进制代码叫做信息交换码(简称国标码)。 国标码共有汉字6763个(一级汉字,是最常用的汉字,按汉语拼音字母顺序排列,共3755个;二级汉字,属于次常用汉字,按偏旁部首的笔划顺序排列,共3008个),数字、字母、符号等682个,共7445个。 国标码=(区位码的十六进制表示)+2020H,国标码的取值范围:2121H~7E7EH。 国标码 H = 机内码
53
中文字符的存储 知识点介绍 汉字信息在计算机内部处理时,统一使用机内码 输入码 国标码 机内码 字形码 内码 外码 输出码 汉字输入
汉字输出 汉字信息在计算机内部处理时,统一使用机内码 在国标码中,一个汉字用两个字节表示, 每个字节只用其中的七位, 每个字节的取值范围和94个可打印的ASCII字符的取值范围相同, 涵盖了一级汉字3755个 国标码 H = 机内码
54
3、汉字输出码 向量(矢量)法:将汉字分解成笔画,每种笔画使用一段段的直线(向量)近似地表示,这样每个字形都可以变成一连串的向量。
点阵法(字模点阵码):汉字字模码又称汉字字形码,它是将汉字字形经过点阵数字化后形成的一串二进制数,有点的地方为“1”,空白的地方为“0” 。用于汉字的显示和打印。 根据汉字输出的要求不同,点阵有以下几种: 简易型汉字:16×16, 16*16/8=32字节 普通型汉字:24×24, 72字节/汉字 提高型汉字:32×32,128字节/汉字。 汉字字库:将所有汉字的字模点阵代码按内码顺序集中起来,构成了汉字库。
55
中文字符的存储 知识点介绍 输入码 国标码 机内码 字形码 内码 外码 输出码 汉字信息在输出时使用字形码以确定一个汉字的点阵 汉字输入
汉字输出 汉字信息在输出时使用字形码以确定一个汉字的点阵
56
练习 D 1.在24×24点阵式汉字库中,一个汉字的字形码将占用____字节。 A) 24 B) 48 C) 72 D) 96
2.有100个汉字用某一种编码存储在计算机内,需占用12800个字节的容量,这种编码属于______ 。 A) 机内码 B) 16×16点阵字型码 C) 24×24点阵字型码 D) 32×32点阵字型码 D
57
知识点介绍 图形图像的存储 图形图像在屏幕上是按像素点显示的。每个像素点可以用多个Bit表示,对于 1 Bit,该像素点只能有黑白两种颜色,对于8Bit,该像素点就有256 种颜色,位数越多,色彩越丰富,图像文件的大小也越大。图像色彩越丰富,对于内存的容量要求越高。因为,文件要显示在屏幕上。需要先调到内存中。对于一幅分辨率为800*600的256色的文件,要求的内存大小为:800*600*8Bit=468KByte
58
知识点介绍 图形图像的存储 8Bit 256色 像素点
59
原码、反码和补码
60
原码就是最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
计算机中参与运算的数有正负之分,计算机中的数的正负号也是用二进制表示的。用二进制数表示符号的数称为机器码。常用的机器码有原码、反码和补码。 原码就是最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
61
一、原码 求原码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位照抄。 【例1】X= [X]原 = 【例2】X= [X]原 = 二、反码 求反码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位按位取反。 【例3】X= [X]反 = 【例4】X= [X]反 = 三、补码 求补码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位按位取反后,最低位加1。 【例5】X= [X]补 = 【例6】X= [X]补 = 已知原码求补码是取反加一,已知补码求原码依然是取反加一(符号位不变) 0取反加1试试
62
四、补码加减法 计算机中实际上只有加法,减法运算转换成加法运算进行,乘法运算转换成加法运算进行,除法运算转换成减法运算进行。用补码可以很方便的进行这种运算。 1、补码加法 [X+Y]补 = [X]补 + [Y]补 【例7】X= ,Y= ,求[X+Y]补 [X]补= [Y]补= [X+Y]补 = [X]补 + [Y]补 = = 注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是 ,而是 。 2、补码减法 [X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补 其中[-Y]补称为负补,求负补的方法是:对补码的每一位(包括符号位)求反,最后末位加“1”。 【例8】X= ,Y= ,求[X-Y]补 [X]补= [Y]补= [-Y]补 = [X-Y]补 = [X]补 + [-Y]补 = =
63
为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 0原码是 原码是 这两个数其实都是0,但他们的原码却有不同的表示。 0反码是 反码是 0补码是 补码是 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [ ]补 =[ ]反+1 = =(1) = (最高位溢出了,符号位变成了0)
64
假设机器能处理的位数为8. 即字长为1byte,原码能表示数值的范围为 (-127~-0 +0~127)共256个
这个补码表示的哪个数的补码呢? 其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个
65
数的表示范围 通过上面的学习,我们就可以知道计算机如果用一个字节表示一个整数的时候,如果是无符号数,可以表示0~255共256个数( ~ ),如果是有符号数则能表示-128~127共256个数( ~ )。如果两个字节表示一个整数,则共有65536个数可以表示,大部分程序设计语言中整数的范围都是-32768~32767的原因,可以看出这种整数类型是16位的有符号数,而且是补码表示的。n位范围是-2n-1到2n-1-1
66
奇偶校验 计算机中数据在进行存储和传输过程中可能会发生错误。为了及时发现和纠正这类错误,在数据传输(存储)过程中要进行校验,常用的校验方法就是奇偶校验。 奇偶校验能发现一位或奇数位错误,且不能纠正错误。一般以字节(八位二进制)为单位加1位奇偶校验位。奇偶校验分奇校验和偶校验两种。 一、奇校验:一个字节前面加一位校验位使得“1”的个数保持为奇数,若八位二进制数中“1”的个数为偶数,则校验位为“1”;若八位二进制数中“1”的个数为奇数,则校验位为“0”。 【例1】给 加奇校验结果为 二、偶校验:一个字节前面加一位校验位使得“1”的个数保持为偶数,若八位二进制数中“1”的个数为偶数,则校验位为“0”;若八位二进制数中“1”的个数为奇数,则校验位为“1”。 【例2】给 加偶校验结果为
67
复习 逻辑运算 ① 逻辑乘,也称“与”运算,运算符为“·”或“∧” 0·0=0 0·1=0 1·0=0 1·1=1
0·0=0 0·1=0 1·0=0 1·1=1 使用逻辑变量时,A·B可以写成AB ② 逻辑加,也乘“或”运算,运算符为“+”或“∨” 0+0= =1 1+0=1 1+1=1 ③ 逻辑非,也称“反”运算,运算符是在逻辑值或变量符号上加“—” - 0 = = 0
68
常用运算 异或运算:A⊕B = A·B+A·B
2、基本公式 ① 0,1律 A·0= A·1=A A+0=A A+1=1 ② 交换律 A+B=B+A A·B=B·A ③ 结合律 A+B+C =(A+B)+C = A+(B+C) A·B·C =(A·B)·C = A·(B·C) ④ 分配律 A·(B+C)= A·B + A·C ⑤ 重叠律 A+A+...+A = A A·A·...·A = A ⑥ 互补律 A + A = A·A = 0 ⑦ 吸收律 A+A·B = A A·(A+B) = A A+A·B = A+B A·(A+B) = A·B ⑧ 对合律 对一个逻辑变量两次取反仍是它本身 ⑨ 德·摩根定理 A+B = A·B A·B = A+B
69
运算符的优先级 内层小括号先计算 函数先求值 单目运算符(+,-,not) 乘的关系双目运算符(*,/,div,mod,and)
加的关系双目运算符(+,-,or) 关系运算符(<,<=,>,>=,=,<>) 在同级运算中,按从左到右的顺序计算
70
位运算 程序中的所有数在计算机内存中都是以二进制的形式储存的。
位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。 举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110 AND 0010 --> 2
Similar presentations