1、字符类型变量与字符类型变量与ASCII码码(附录(附录C)n1位二进制数可以表示2种状态:0、1;而2位二进制数可以表示4种状态:00、01、10、11;依次类推,7位二进制数可以表示128种状态,每种状态都唯一地编为一个每种状态都唯一地编为一个7 7位的二进制码位的二进制码(数)(数),对应一个字符(或控制码),对应一个字符(或控制码),这些码可以排列成一个十进制序号0127。nASCII码用7位二进制数进行编码,可表示128个字符。q 第032号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)
2、等;q 第33126号(共94个)是字符,其中,第4857号为09十个阿拉伯数字;6590号为26个大写英文字母,97122号为26个小写英文字母,其余为一些标点符号、运算符号等。2n输出所有输出所有ASCII码对应的码对应的“字符字符”及其内存及其内存中的二进制表示(由中的二进制表示(由0和和1组成的串)。组成的串)。n一行输出一行输出4个字符个字符n在输出各字符时,格式要求如下:在输出各字符时,格式要求如下:ASCIIASCII码的十进制值码的十进制值二进制串二进制串字符字符 表示输出空格。表示输出空格。例如:例如:75 750100101101001011K K其中,十进制数要求占三个字
3、符宽,不够宽其中,十进制数要求占三个字符宽,不够宽时在数值后面补上空格时在数值后面补上空格(如(如 )。3算法实现(算法实现(STEP BY STEP)#include using namespace std;int main()return 0;4#include using namespace std;int main()for(int i=0;i128;i+)cout i;cout char(i);return 0;5#include using namespace std;int main()for(int i=0;i128;i+)out_int_with_sp(i);cout cha
4、r(i);return 0;6void out_int_with_sp(int i)if(i 10)cout ;/双引号是字符串else if(i 100)cout ;/单引号是字符 cout i;此处 i 是哪些值?此处 i 是哪些值?此处 i 是哪些值?7#include using namespace std;int main()for(int i=0;i128;i+)out_int_with_sp(i);cout char(i);if(i%4=3)cout endl;else cout ;return 0;8#include using namespace std;int main()
5、for(int i=0;i128;i+)out_int_with_sp(i);cout ;out_char_bin(i);cout char(i);if(i%4=3)cout endl;else cout=0;i-)output_bit(n,i);10void output_bit(int n,int i)int bit=get_bit(n,i);cout bit;11void output_bit(int n,int i)int bit=get_bit(n,i);cout bit;int get_bit(int n,int pos)int index=(1 pos);return bit;1
6、213bool IsEven(int n)if(n%2=0)return true;elsereturn false;14bool IsEven(int n)if(n%2=0)return true;elsereturn false;bool IsEven(int n)return(n%2=0);bool IsOdd(int n)return(n%2!=0);/ver 1.015bool IsEven(int n)if(n%2=0)return true;elsereturn false;bool IsEven(int n)return(n%2=0);bool IsOdd(int n)retu
7、rn(n%2!=0);/ver 1.0bool IsOdd(int n)return(n%2);/ver 2.016int IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0任务:请输出任务:请输出 中所有的奇数中所有的奇数?这样写行不行?17int IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn
8、 M;/ver 4.0for(int i=1;i=100;i+)if(IsOdd(i)=x)/ver 4.0cout i :odd num endl;else cout i :NOT odd num endl;18int IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0for(int i=1;i=100;i+)/if(IsOdd(i)=x)/ver 4.0 if(IsOdd(i)=29)/ver 3.0cout i :odd num
9、endl;else cout i :NOT odd num endl;19int IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0for(int i=1;i=100;i+)/if(IsOdd(i)=x)/ver 4.0/if(IsOdd(i)=29)/ver 3.0if(IsOdd(i)=true)/ver 2.0,1.0cout i :odd num endl;else cout i :NOT odd num endl;20int
10、IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0for(int i=1;i=100;i+)/if(IsOdd(i)=x)/ver 4.0/if(IsOdd(i)=29)/ver 3.0/if(IsOdd(i)=true)/ver 2.0,1.0if(IsOdd(i)/ver 2.0,1.0cout i :odd num endl;else cout i :NOT odd num endl;21int IsOdd(int n)if(n%
11、2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0什么是“是”,什么是“不是”?22int IsOdd(int n)if(n%2)return 29;elsereturn 77;/ver 3.0char IsOdd(int n)if(n%2)return X;elsereturn M;/ver 4.0你你说它是,它就是,不是也是。说它是,它就是,不是也是。你你说它不是,它就不是,是也不是。说它不是,它就不是,是也不是。什么是“是”,什么是“不是”?23任务91:(1)定
12、义一个浮点类型的变量,将浮点值 114.25 赋给它。试编程输出这个浮点类型的变量的内存单元的内容。(2)求以下几个16进制数对应的浮点数值:0X42E48000、0XC0200000、0XBE000000、0X49E48E68。24/此处为 dec2bin()函数定义代码/详细内容见后续页int main()float f=114.25f;int*pn=(int*)(&f);int n=*pn;cout f=f endl;cout n=n endl;dec2bin(n);/或 dec2bin(*pn);cout endl endl;task-9将浮点单元的地址将浮点单元的地址值值&f,转换成
13、为整,转换成为整数单元的地址。数单元的地址。(T2*)(&T1_var)25intint a=0 x42E48000,b=0 xC0200000,a=0 x42E48000,b=0 xC0200000,c=0 xBE000000,d=0 x49E48E68;c=0 xBE000000,d=0 x49E48E68;coutcout *(float(float*)(&a)(&a)endlendl;dec2bin(a);dec2bin(a);coutcout endlendl;coutcout *(float(float*)(&b)(&b)endlendl;dec2bin(b);dec2bin(b)
14、;coutcout endlendl;coutcout *(float(float*)(&c)(&c)endlendl;dec2bin(c);dec2bin(c);coutcout endlendl;coutcout *(float(float*)(&d)(&d)endlendl;dec2bin(d);dec2bin(d);coutcout endlendl;return 0;return 0;/task-9/task-9task-91.取地址取地址&a2.指针类型转换指针类型转换(float*)(&a)3.按新类型读取按新类型读取单元的内容单元的内容*(float*)(&a)26#inclu
15、de using namespace std;int get_bitget_bit(int n,int pos)/还记得这个函数吗?int index=(1 pos);return bit!=0;/Version 2void dec2bindec2bin(int n)for(int i=sizeof(n)*8-1;i=0;i-)cout (E-127)d=(-1)S*(M+1)(E-1023)说明:说明:1.在二进制的科学计数法中,小数点前的整数部分总是1。为节省空间,不为整数位的1分配二进制位,把这个高位1隐藏掉。因此,实际尾部是(M+1)。2.为计算方便,指数也分别加上了127(对floa
16、t类型)或1023(对double类型),然后再存储。因此,实际的指数应该是(E-127)或(E-1023)。S S:浮点数的符号位:浮点数的符号位E E:浮点数的指数:浮点数的指数M M:浮点数的尾数:浮点数的尾数任务92*:根据IEEE对浮点格式的规定,编程输出浮点数值114.25的二进制表示形式中“指数部分”E和“尾数部分”M的具体内容,即由0和1组成的二进制串。再用M和E“计算”出对应浮点值。float f;/sizeof(float)=float f;/sizeof(float)=4 4S:1E:8M:23f=(-1)S*(M+1)(E-127)课后思考题课后思考题28s:1e:8m
17、:23F=(-1)S*(M+1)(E-127)Input(0 31 bits)第一步第二步31 30.022.29int main()float f=114.25;int*pf=(int*)(&f);dec2bin(*pf);/参考“答案”int n=*pf;int S=get_S(n);/获取符号位int E=get_E(n);/获取指数部分int M=get_M(n);/获取尾数部分dec2bin(E);dec2bin(M);cout get_value(M,E)endl;/上面的计算结果应为 114.25return 0;/task-9.2参考主程序实现30整数部分38414,直接转为二
18、进制,得960E(因为01串太长,这里写成十六进制形式)小数部分0.4,转换过程如下:0.4=0.5*0+0.25*1+0.125*1+0.0625*0+得0110 1010 1010 1010 1010 1010 1010 1010 1010 1 于是,38414.4(dec)=1001 0110 0000 1110.0110 1010 1010 1010 1010 1010 1010 1010 1010 1(bin)用科学计数法表示为 1.001 0110 0000 1110 0110 1010 1010(其余位略)乘以2的15次方。然后去掉最高位的整数1,纯小数部分则对应浮点数的尾数部分。指数部分15+1023=1038;二进制表示为:100 0000 1110 尾数部分 001 0110 0000 1110 0110 1010 1010(余位略)带上符号位合并后为 0100 0000 1110 0010 1100 0001 1100 1101 0101 0101 0101 0101 0101 0101 0101 0101,十六进制形式为 40 E2 C1 CD 55 55 55 55,在内存中由低字节到高字节存放,为55 55 55 55 CD C1 E2 40double 值38414.4,求它在内存中的二进制表示3132