第二章计算机中的信息表示
- 格式:ppt
- 大小:1008.50 KB
- 文档页数:44
第2章计算机中的信息表示习题参考答案1. 设机器数长为8位(含1位符号位在内),写出对应下列各真值的原码、补码和反码。
6413−, 12829,100,-872. 写出下列各数的原码、反码、补码表示(用8位二进制数),其中MSB 是最高位(又是符号位),LSB 是最高位。
如果是小数,小数点在MSB 之后;如果是整数,小数点在LSB 之后。
(1) -35/64 (2)23/128 (3) –127 (4)用小数表示-1 (5)用整数表示-1 解:(1)-35/64 = -0.100011原码1.1000110 反码1.0111001 补码1.0111010(2)23/128= 0.0010111原码0.0010111 反码0.0010111 补码0.0010111 (3) –127=1111111原码11111111 反码10000000 补码10000001 (4) 用小数表示-1 补码1.0000000 (5) 用整数表示-1原码10000001 反码11111110 补码1111111113. 己知[X],求[X]和X .补原4. 当十六进制数9B和FF分别表示为原码、补码、反码、移码和无符号数时,所对应的十进制数各为多少(设机器数采用一位符号位)。
答:5. 有一个字长为32位的浮点数,符号位1位,阶码8位,用移码表示,尾数23位,用补码表示;基数为2。
请写出:(1)最大数的二进制表示;(2)最小数的二进制表示; (3)规格化数所能表示数的范围。
解:用IEEE754格式(E的取值范围:1~254,留出全0和全1分别表示0和无穷大)31 30 23 22 20 0S E M(1) 最大数的二进制表示:0 11111110 11111111111111111111111即 2127(2-2-23)(2) 最小数的二进制表示:1 11111110 11111111111111111111111即 - 2127(2-2-23)(3) 规格化数所能表示数的范围:最小的正数:0 00000001 00000000000000000000001 即2-126(1+2-23)绝对最小的负数:1 00000001 00000000000000000000001 即-2-126(1+2-23)所以范围是: -2127(2-2-23)至-2-126(1+2-23) ,2-126(1+2-23)至2127(2-2-23)6. 将下列十进制数表示成IEEE754标准的32位浮点规格化数。
计算机基础知识:第二章计算机中的信息表示1第二章计算机中的信息表示2.1 进位计数制2.1.1数制的概念什么是数制?数制是用一组固定的数字和一套统一的规则来表示数目的方法。
按照进位方式计数的数制叫进位计数制。
十进制即逢十进一,生活中也常常遇到其它进制,如六十进制(每分钟60秒、每小时60分钟,即逢60进1),十二进制,十六进制等。
任何进制都有它生存的原因。
人类的屈指计数沿袭至今,由于日常生活中大都采用十进制计数,因此对十进制最习惯。
如十二进制,十二的可分解的因子多(12,6,4,3,2,1),商业中不少包装计量单位“一打”;如十六进制,十六可被平分的次数较多(16,8,4,2,1),即使现代在某些场合如中药、金器的计量单位还在沿用这种计数方法。
进位计数涉及基数与各数位的位权。
十进制计数的特点是“逢十进一”,在一个十进制数中,需要用到十个数字符号0-9,其基数为10,即十进制数中的每一位是这十个数字符号之一。
在任何进制中,一个数的每个位置都有一个权值。
2.1.2 基数基数是指该进制中允许选用的基本数码的个数。
每一种进制都有固定数目的计数符号。
十进制:基数为10,10个记数符号,0、1、2、……9。
每一个数码符号根据它在这个数中所在的位置(数位),按“逢十进一”来决定其实际数值。
二进制:基数为2,2个记数符号,0和1。
每个数码符号根据它在这个数中的数位,按“逢二进一”来决定其实际数值。
八进制:基数为8,8个记数符号,0、1、2、……7。
每个数码符号根据它在这个数中的数位,按“逢八进一”来决定其实际的数值。
十六进制:基数为16,16个记数符号,0-9,A,B,C,D,E,F。
其中A~F对应十进制的10~15。
每个数码符号根据它在这个数中的数位,按“逢十六进一”决定其实际的数值。
计算机系统导论——读书笔记——第⼆章信息的表⽰和处理第⼆章信息的表⽰和处理2.1 信息存储2.1.1 ⼗六进制2.1.2 字数据⼤⼩2.1.3 寻址和字节顺序1.地址:对象所使⽤的字节中最⼩的地址2.⼤端法:最⾼有效字节在前⼩端法:最低有效字节在前(⼤多Intel兼容机使⽤)3.发送⽅机器(内部代码)——>⽹络应⽤程序(⽹络标准)——>接收⽅机器(内部代码)4.⼩程序——打印程序对象的字节表⽰1 #include <stdio.h>2using namespace std;34 typedef unsigned char * byte_pointer;//定义类型:指向unsigned char的指针56void show_byte(byte_pointer start, size_t len){7 size_t i;8for(i = 0; i < len; ++i)9 printf(" %.2x", start[i]);//%.2x表⽰整数必须⽤⾄少两个数字的⼗六进制格式输出10 printf("\n");11 }1213void show_int(int x){14 show_byte((byte_pointer) &x, sizeof(int));15 }1617void show_float(float x){18 show_byte((byte_pointer) &x, sizeof(float));19 }2021void show_double(double x){22 show_byte((byte_pointer) &x, sizeof(double));23 }2425void show_pointer(void * x){//void*是特殊类型的指针,没有相关联的类型信息26 show_byte((byte_pointer) &x, sizeof(void *));27 }2829int main(){30int x;31float y;32double z;33while(scanf("%d %f %lf", &x, &y, &z)){34 show_int(x);35 show_float(y);36 show_double(z);37 show_pointer(&x);38 show_pointer(&y);39 show_pointer(&z);40 }41return0;42 }输⼊111-1-1.0-1.0123451.0011.001输出01 00 00 0000 00 80 3f00 00 00 00 00 00 f0 3f98 f5 bf ef fe 7f 00 0094 f5 bf ef fe 7f 00 0088 f5 bf ef fe 7f 00 00ff ff ff ff00 00 80 bf00 00 00 00 00 00 f0 bf98 f5 bf ef fe 7f 00 0094 f5 bf ef fe 7f 00 0088 f5 bf ef fe 7f 00 0039 30 00 00c5 20 80 3f6a bc 74 93 18 04 f0 3f98 f5 bf ef fe 7f 00 0094 f5 bf ef fe 7f 00 0088 f5 bf ef fe 7f 00 00我的电脑是MaxOS,可以看出它是64位系统,采⽤⼩端法表⽰5.可以通过在终端(mac是terminal,windows是命令⾏⼯具)执⾏命令man ascii得到⼀张ASCII字符码表,回车后运⾏结果如下ASCII(7) BSD Miscellaneous Information Manual ASCII(7)NAMEascii -- octal, hexadecimal and decimal ASCII character setsDESCRIPTIONThe octal set:000 nul 001 soh 002 stx 003 etx 004 eot 005 enq 006 ack 007 bel010 bs 011 ht 012 nl 013 vt 014 np 015 cr 016 so 017 si020 dle 021 dc1 022 dc2 023 dc3 024 dc4 025 nak 026 syn 027 etb030 can 031 em 032 sub 033 esc 034 fs 035 gs 036 rs 037 us040 sp 041 ! 042 " 043 # 044 $ 045 % 046 & 047 '050 ( 051 ) 052 * 053 + 054 , 055 - 056 . 057 /060 0 061 1 062 2 063 3 064 4 065 5 066 6 067 7070 8 071 9 072 : 073 ; 074 < 075 = 076 > 077 ?100 @ 101 A 102 B 103 C 104 D 105 E 106 F 107 G110 H 111 I 112 J 113 K 114 L 115 M 116 N 117 O120 P 121 Q 122 R 123 S 124 T 125 U 126 V 127 W130 X 131 Y 132 Z 133 [ 134 \ 135 ] 136 ^ 137 _140 ` 141 a 142 b 143 c 144 d 145 e 146 f 147 g150 h 151 i 152 j 153 k 154 l 155 m 156 n 157 o160 p 161 q 162 r 163 s 164 t 165 u 166 v 167 w170 x 171 y 172 z 173 { 174 | 175 } 176 ~ 177 delThe hexadecimal set:00 nul 01 soh 02 stx 03 etx 04 eot 05 enq 06 ack 07 bel08 bs 09 ht 0a nl 0b vt 0c np 0d cr 0e so 0f si10 dle 11 dc1 12 dc2 13 dc3 14 dc4 15 nak 16 syn 17 etb18 can 19 em 1a sub 1b esc 1c fs 1d gs 1e rs 1f us20 sp 21 ! 22 " 23 # 24 $ 25 % 26 & 27 '28 ( 29 ) 2a * 2b + 2c , 2d - 2e . 2f /30 0 31 1 32 2 33 3 34 4 35 5 36 6 37 738 8 39 9 3a : 3b ; 3c < 3d = 3e > 3f ?40 @ 41 A 42 B 43 C 44 D 45 E 46 F 47 G48 H 49 I 4a J 4b K 4c L 4d M 4e N 4f O50 P 51 Q 52 R 53 S 54 T 55 U 56 V 57 W58 X 59 Y 5a Z 5b [ 5c \ 5d ] 5e ^ 5f _60 ` 61 a 62 b 63 c 64 d 65 e 66 f 67 g68 h 69 i 6a j 6b k 6c l 6d m 6e n 6f o70 p 71 q 72 r 73 s 74 t 75 u 76 v 77 w78 x 79 y 7a z 7b { 7c | 7d } 7e ~ 7f delThe decimal set:0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 '40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 /48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 756 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ?64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 delFILES/usr/share/misc/asciiHISTORYAn ascii manual page appeared in Version 7 AT&T UNIX.BSD June 5, 1993 BSD(END)2.1.4 表⽰字符串1.⼗进制数字‘y’的ascii码正好是0x3y2.strlen(str)函数不计算终⽌的空字符(ascii码为0x00)3.字符编码⽅式:(1)ASCII (American Standard Code for Information interchange)(2)Unicode (Unique Code)(3)UTF-8 / UTF-16 / UFT-32 (Unicode Transformation Format)2.1.5 表⽰代码2.1.6 布尔代数(Boolean Algebra)简介1.布尔运算&对|有分配律:a&(b|c) = (a&b)|(a&c)布尔运算|对&有分配律:a|(b&c) = (a|b)&(a|c)2.位向量:长度为w,由0和1组成的串应⽤:表⽰有限集合/压位运算(例:[01101010]表⽰集合{1,3,5,6}),位向量掩码/屏蔽信号3.布尔环(Boolean ring),类似于整环/整数环“加法”逆元:^类似于+; 每个整数x有加法逆元-x使得x+(-x)=0,类似地,每个布尔元素a都有“加法逆元”a使得a^a=0; 有趣的性质:(a^b)^a=b 1//这是⼀个不需要第三个量的交换函数,不过它并没有性能上的优势2void inplace_swap(int *x, int *y){//*x = a, *y = b3 *x = *x ^ *y;//*x = a^b, *y = b4 *y = *x ^ *y;//*x = a^b, *y = a5 *x = *x ^ *y;//*x = b, *y = a6 }2.1.7 C语⾔中的位级运算:&, |, ^, ~2.1.8 C语⾔中的逻辑运算: &&, ||, !2.1.9 C语⾔中的移位运算:>>, <<1.逻辑右移(⾼位补0,⽆符号数进⾏逻辑右移)算数右移(⾼位补符号位,有符号数进⾏算数右移)(1)初级运算符[]().->(2)单⽬运算符(3)算数运算符(4)移位运算符(5)关系运算符(6)位级运算符(7)逻辑运算符(8)赋值运算符2.2 整数表⽰2.2.1 整形数据类型2.2.2 ⽆符号数的编码(unsigned)2.2.3 补码编码(two's-complement)1.<limits.h>库:INT_MIN, INT_MAX, UINT_MAX<stdint.h>库:intN_t, UintN_t (t = 16,32,64等)(我在xcode上没有include这两个库也能直接使⽤INT_MIN、int32_t等)2.有符号数的表⽰⽅法(1)补码(two's-complement):最⾼位权重为-2^(w-1)(2)反码(ones' complement):最⾼位权重为-(2^(w-1)-1)(3)原码(sign-magnitude):最⾼位为1表⽰所有其他位权重为负注:(2)(3)中0的表⽰法不唯⼀,有+0和-0两种2.2.4 有符号数和⽆符号数之间的转换(可能)改变数值,但不改变位表⽰1.补码转换为⽆符号数(w位):TMin <= x < 0, T2U(x) = x + 2^w0 <= x <= TMax, T2U(x) = x2.⽆符号数转换为有符号数(w位):0 <= x <= TMax, U2T(x) = xTMax < x <= UMax, U2T(x) = x - 2^w2.2.5 C语⾔中的有符号数和⽆符号数1.数字常量默认为有符号数,加上后缀u或U可创建⽆符号数常量2.类型转换的⽅式:(1)显式:强制类型转换(2)隐式:不同类型变量间赋值3.%d有符号⼗进制,%u⽆符号⼗进制,%o⼋进制,%x⼗六进制4.C语⾔对于同时包含有符号数和⽆符号数的表达式,会隐式地将有符号数转换为⾮负的⽆符号数 1/*2这是⼀个测试函数3注:TMin写成-2147483647-1⽽⾮-21474836484是因为limits.h中定义INT_MIN=-INT_MAX-1,以规避某些奇怪的现象5*/6 #include <cstdio>7using namespace std;89int main(){10 printf("-1 < 0u = %d\n", -1 < 0u);11 printf(" -1 = 0x%x \n", -1);12 printf(" 0u = 0x%x\n\n", 0u);1314 printf("2147483547 > (int)2147483648u = %d\n", 2147483547 > (int)2147483648u);15 printf(" 2147483547 = 0x%x \n", 2147483547);16 printf(" (int)2147483648u = 0x%x\n\n", (int)2147483648u);1718 printf("-2147483647-1u < 2147483647 = %d\n", -2147483647-1u < 2147483647);19 printf(" -2147483647-1u = 0x%x \n", -2147483647-1u);20 printf(" 2147483647 = 0x%x\n\n", 2147483647);2122 printf("-2147483647-1u < -2147483647 = %d\n", -2147483647-1u < -2147483647);23 printf(" -2147483647-1u = 0x%x \n", -2147483647-1u);24 printf(" -2147483647 = 0x%x\n\n", -2147483647);25return0;26 }运⾏结果如下-1 < 0u = 0-1 = 0xffffffff0u = 0x02147483547 > (int)2147483648u = 12147483547 = 0x7fffff9b(int)2147483648u = 0x80000000-2147483647-1u < 2147483647 = 0-2147483647-1u = 0x800000002147483647 = 0x7fffffff-2147483647-1u < -2147483647 = 1-2147483647-1u = 0x80000000-2147483647 = 0x800000012.4 浮点数2.4.1 ⼆进制⼩数2.4.2 IEEE浮点表⽰1.表⽰形式:(1)符号(sign)s: 表⽰+-(2)尾数(significand)M:⼆进制⼩数,取值范围为[1,2)或[0,1)(3)阶码(exponent)E:对浮点数加权,权重为2的E次幂2.编码:s编码符号sign s,exp编码阶码exponent E,frac编码尾数significand M3.三种情况(1)规格化的(noemalized): exp!=00...0 && exp!=11 (1)i. 阶码 E = exp - bias, bias = 2^(k-1)-1, k=exp的位数ii. 尾数 M = 1.xx...x = 1.frac的位(隐含的以1开头的表⽰)(2)⾮规格化的(denormalized): exp == 00 0i. 阶码 E = 1 - bias, bias = 2^(k-1)-1, k=exp的位数ii. 尾数 M = 0.xx...x = 0.frac的位iii.注意:0.0有两种表⽰⽅法+0.0和-0.0,符号位分别为0或1,其他位全部为0(3)特殊值: exp == 11 (1)i. ⽆穷:frac = 00...0, s=0或1表⽰+∞或-∞,能够表⽰溢出的运算结果,如x/0 ii. Nan(not a number): frac != 00...0, 表⽰⾮实数的运算结果,如根号-1,∞-∞4.三种情况的数字分布⾮规格化数字的阶码定义为E=1-bias可以补偿⾮规格化的尾数没有隐含的开头1,有助于数字表⽰的平滑转变;否则,在绝对值最⼤的⾮规格化数字(其⼆进制表⽰为0 00...0 11...1)和绝对值最⼩的规格化数字(其⼆进制表⽰为0 00...01 00...0)之间将存在跳跃2.4.3 数字⽰例1. 处理正浮点数时,若按照⽆符号整数解释他们的⼆进制表⽰,则可以发现它们的⼤⼩顺序不变;负浮点数只需要倒序。
第二章一、选择题1.下列数中,最小的数是 A 。
8A.(101001)2B.(52) C.(2B)16D.452.下列数中,最大的数是 D 。
A.(101001)2B.(52)8C.(2B)16 D.453.计算机中表示地址时使用__ _D___A.原码B.补码C.反码D.无符号数4.字长16位,用定点补码小数表示时,一个字能表示的范围是__D___ 1-2-15A.-1~()B.0~(1-2-15)1-2-15C.-1~+1 D.-()~(1-2-15)5.若X补=10000000,则十进制真值为___ C___。
A、-0B、-127C、-128D、-16.定点整数16位,含1位符号位,原码表示,则最大正数为___C ___A、216B、215C、215-1D、216-17.当-1<x<0时,[x]原=___B___A.xB.1-xC.4+xD.(2-2n)-1*18.8位反码表示数的最小值为_______,最大值__ A___。
A.-127,+127B.-128,+128C.-256,+256D.-255,+2559.N+1位二进制正整数的取值范围是____D ___A.0~2n-1 B.1~2n-1C.0~2n+1-1 D.1-2n+1-110.浮点数的表示范围和精度取决于___ A____A.阶码的位数和尾数的位数B.阶码的位数和尾数采用的编码C.阶码采用的编码和尾数采用的编码D.阶码采用的编码和尾数的位数11.在浮点数编码表示中,___ C___在机器数中不出现,是隐含的。
A.尾数B.符号C.基数D.阶码12.移码和补码比较,只有____ C___不同,其他都相同。
A.正号 B.负号C.符号 D.标志13.一个24×24点阵的汉字,需要___ _B____字节的存储空间。
A.62 B.72C.64 D.3214.62个汉字的机内码需要 CA.62字节 B.32字节C.124字节 D.248字节15.ASCII码是对____ A____进行编码的一种方案A.字符、图形符号 B.汉字C.数字 D.声音16.D/A转换是___ C___A.把计算机输出的模拟量转化为数字量B.把模拟量转化为数字量,把数字量输入到计算机C.把数字量转化为模拟量,把转化结果输出计算机D.把计算机输出的模拟量转为数字量17.在大量数据传送中常用且有效的检验法是__ D___A.奇偶校验法 B.海明码校验C.判别校验 D.CRC校验二、填空题1.二进制中的基数为 2,十进制中的基数为 10 ,八进制中的基数为8 ,十六进制中的基数为 16 。