实验笔记2
电路图如实验1
使用printf函数需要头文件#include <stdio.h>
printf函数可以输出格式化字符,而且可以将要显示的数据发往串行口,这样,使用串口调试工具就能观察单片机传来的数据了。
printf函数除了标准C的格式控制字符外还扩展出了b、h、l来对字符宽度进行限制。
其中:b表示8位,h表示16位(默认值,可省略标识符),l表示32位。
如果没有宽度标识符,除整形数据(int 和unsigned int 型)外,其余类型都会出现错误。
如果不用宽度标示符,也可以使用强制类型转换的方法,将char 或unsigned char 的变量强制转换成int 或unsigned int,最终实现的效果与使用宽度标识符b、h、l完全相同。
%p是指针变量的格式输出符。
例如:
char d=10;
printf("char d=%d\n",d); //将显示char d=2560
因为变量d只占用一个字节8位,而不加宽度标识符缺省认为是16位,所以显示会出错
printf("char d=%bd\n",d); //将显示char d=10
加了宽度标识符后,显示正确
printf("char d=%d\n",(int)d); //将显示char d=10
或者,将char型强制转换为int型再用%d显示,也能得到正确的结果
实验效果
在计算机内存中,所有的负数都是以补码的形式存放的,
例如:
char a=-1;
char b=3;
-1的原码是 1000 0001 //最高位是符号位,0表示正,1表示负
-1的反码是 1111 1110 //最高位不变,其它各位求反
-1的补码是 1111 1111 //最高位不变,在反码的基础上加1
那么a+b就是-1+3=2,它在内存中的计算是:
1111 1111 //-1
0000 0011 //3
+---------------
0000 0010 //2 符号位为正,正数的补码就是它本身,所以结果为+2
再如:
char a=-1;
char b=-2;
-1的原码是 1000 0001 //最高位是符号位,0表示正,1表示负
-1的反码是 1111 1110 //最高位不变,其它各位求反
-1的补码是 1111 1111 //最高位不变,在反码的基础上加1
-2的原码是 1000 0010
-2的反码是 1111 1101
-2的补码是 1111 1110
(-1)+(-2)在内存中的计算
1111 1111 //-1
1111 1110 //-2
+----------------
1111 1101 //最高位为1表明这是一个负数,是补码形式,要想得到原码,需要再求一次补码,即:
【【原码】补】补=原码
对结果再求一次补码可以得到原码
1111 1101 //结果的补码
1000 0010 //最高位不变,其它位求反
1000 0011 //在反码的基础上加1,得到结果的原码=-3
实验程序源码下载地址:https://pan.baidu.com/s/1-OLy8nojz6RC_6PNOx4DuQ
联系客服