打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
15W4K58S4 实验2:格式化输出

实验笔记2

电路图如实验1 

使用printf函数需要头文件#include <stdio.h>

printf函数可以输出格式化字符,而且可以将要显示的数据发往串行口,这样,使用串口调试工具就能观察单片机传来的数据了。

printf函数除了标准C的格式控制字符外还扩展出了bhl来对字符宽度进行限制。

其中:b表示8位,h表示16位(默认值,可省略标识符),l表示32位。

如果没有宽度标识符,除整形数据(int unsigned int )外,其余类型都会出现错误。

如果不用宽度标示符,也可以使用强制类型转换的方法,将char unsigned char 的变量强制转换成int unsigned int,最终实现的效果与使用宽度标识符bhl完全相同。

%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

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
爱看
为什么char的范围是 —128~ 127
【重要】关于有符号数与无符号数的一些总结
C语言进阶1-数据在内存中的存储_c语言宏定义的数据存在哪里
原码,反码,补码[转
“整数数据类型”+“各种类型的编码”+“类型转换” 的细节过程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服