实验笔记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是指针变量的格式输出符。
例如:
printf("char d=%d\n",(int)d); //将显示char d=10
在计算机内存中,所有的负数都是以补码的形式存放的, 例如: 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
|
|