打开APP
userphoto
未登录

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

开通VIP
从业十年,教你单片机入门基础。(连载)
本帖最后由 jianhong_wu 于 2015-8-30 07:21 编辑

第三十三节:逻辑运算符的“按位取反”和“非”。
        “按位取反”运算的符号是波浪符号“~”。运算规律是:针对某个数的“按位取反”,先将其展开成二进制的格式,然后每个位取反,所谓取反就是1的变成0,0的变成1。
         现在举一个完整的例子来分析“按位取反”运算的规律。有一个unsigned char类型的十进制数分别是5和0,求~5和~0的结果是多少?分析步骤如下:
        第一步:先把参与运算的数转换成二进制的格式。十进制转二进制的方法请参考前面第13,14,15节的内容。
十进制5的二进制格式是:00000101。
十进制0的二进制格式是:00000000。
        第二步:
(1)将5的二进制数每一位取反,1的变成0,0的变成1。
          ~00000101
结果是11111010。
把二进制的11111010转换成十六进制是:0xFA。转换成十进制是250。所以~5的结果是250。
(2)将0的二进制数每一位取反,1的变成0,0的变成1。
          ~00000000
结果是11111111。
把二进制的11111111转换成十六进制是:0xFF。转换成十进制是255。所以~0的结果是255。
         讲完“按位取反”,现在接着讲“非”。 “非”跟“按位取反”有点相似,但是区别也明显。“按位取反”针对的是一个数的某一位,侧重在局部。而“非”是针对一个数的整体,侧重在全局。“非”只有两种状态“假”和“真”。0代表假,大于0的数值代表真,也可以说“非”假即真,“非”真即假。不是假的就是真的,不是真的就是假的。强调的是两种状态的切换。在数值表示上,用0代表假的状态,用1代表真的状态。
        “非”运算的符号是感叹号“!”。运算规律是:针对某个数的“非”,不管此数有多大,只要它大于0,那么被“非”后就一定是0。也不管此数是什么变量类型,只要它数值等于0,那么被“非”后就一定是1。
         现在举一个完整的例子来分析“非”运算的规律。有一个unsigned char类型的十进制数分别是5和0,求!5和!0的结果是多少?分析步骤如下:
         第一步:5大于0,是一个整体,被“非”后为0.
         第二步:0就是0,是一个整体,被“非”后为1.

         现在编写一个程序来练习刚才讲到的内容,最后把程序编译后下载到坚鸿51学习板观察结果。请直接复制第十节模板程序,修改的main程序代码如下:

  1. void main() //主程序
  2. {
  3. /*---C语言学习区域的开始---------------------------------------------------------------------------*/
  4.         

  5.   unsigned char a=5;
  6.   unsigned char b=5;
  7.   unsigned char c=0;
  8.   unsigned char d=0;

  9.   a=~a;
  10.   b=!b;


  11.   c=~c;
  12.   d=!d;

  13.   GuiWdData0=a;   //把a这个变量放到窗口变量0里面显示
  14.   GuiWdData1=b;   //把a这个变量放到窗口变量1里面显示
  15.   GuiWdData2=c;   //把a这个变量放到窗口变量2里面显示
  16.   GuiWdData3=d;   //把a这个变量放到窗口变量3里面显示   


  17. /*---C语言学习区域的结束---------------------------------------------------------------------------*/
  18.    while(1)  
  19.    {
  20.                   initial();
  21.       key_service();
  22.       display_service();
  23.    }

  24. }

                                                                                    
        查看运算结果的方法。如何在坚鸿51学习板上观察变量?按下S1或者S5按键即可切换显示不同的窗口,从而显示不同的变量。按下S9按键不松手就可以切换到十六进制的显示界面,松开手后会自动切换到十进制的界面。16个LED灯显示的就是当前变量的二进制数,亮代表1,灭代表0。上坚鸿51学习板观察程序执行的结果如下:
        变量a为250(十六进制是0xFA,二进制是11111010)。
        变量b为0 (十六进制是0x00,二进制是00000000)。
        变量c为255(十六进制是0xFF,二进制是11111111)。
        变量d为1 (十六进制是0x01,二进制是00000001)。
        下节预告:移位运算的左移。
(未完待续)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C语言基础知识
学习C++ -> 变量、常量与运算符
八进制和十六进制
进制转换和变量解释
BCD码、十六进制与十进制互转
字符型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服