• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于C语言属于运算的问题

我是假管贴心小助手 2020-06-10 浏览量:647

写了一个51单片机的程序,但是运行不正常,使用网络在线编译的工具验证了一下,发现不对,程序如下截图:

程序中x的值我设置为0xa5,然后听过一个按位或运算,根据x的值,经过一个8次循环后,dat的值应该和x的值一样才对,但是实际运行结果打印出来不对,不知道问题出在哪里。


我已经把每此经过移位后的数据打印出来了,提供给你们分析。

11.jpg

1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 判断某一位是不是1,不应该用按位或,而是按位与,if((x|0x01)==1)由x初始值x=0xA5来说,x|0x01==x,并不等于1,所以if条件不满足,
    • 发布于 2020-06-11
    • 举报
    • 评论 1
    • 0
    • 0
我是假管贴心小助手 回复了 沃尔夫斯堡的羊:对对对,大佬是说到重点了,而我始终在纠结dat先右移还是后右移了。 回复

其他答案 数量:4
  • 判断某一位是不是1,不应该用按位或,而是按位与,if((x|0x01)==1)由x初始值x=0xA5来说,x|0x01并不等于1,只是最低位置1,所以if条件不满足,
    • 发布于2020-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • if这条语句是不会成立的,所以进不去if里面,所以dat永远都是0,应该用if((x&0x01)==1)这个表达式
    • 发布于2020-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • if( (x|0x01)==1 )  这里逻辑有问题,这个 将是判断 x是否为0或者1,否则其他的都是错误的,正确的写法应该是if( x & 0x01)

    完整的程序应该是:

    #include <stdio.h>
    int main(){
       unsigned char i=0dat=0x=0xa5;
       for(i=0;i<8;i++){
           if( x & 0x01 ){
                 dat = dat | 0x80;
           }
           dat= dat>>1;
           x= x>>1;
           printf(" dat 等于:0x%X\r\n"dat);
           printf(".......x 等于:0x%X......\r\n"x);
       }
       return 0;
    }


    • 发布于2020-06-11
    • 举报
    • 评论 0
    • 0
    • 0

  • if的这条只会判断最后一位的,尤其是或的时候,前面的值也有时,就不等于1了,所以,if一真不成立
    • 发布于2020-06-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于C语言属于运算的问题