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

关于16位数移位到8位寄存器的移位操作的问题

SingleYork 2019-03-16 浏览量:2354

01.png


移位操作后面&0XFF有什么好处?高8位不是自动补零了么?另外,低8位放到一个8位的变量中,高位不也直接溢出了,干么也来个&0XFF操作?



0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • &的优先级高于=;

    所以是先》再&再=;

    为了保证高8位为0,保证赋值为低8位;

    如果干扰导致高位有非0,有的编译器就会出现错误赋值为0XFF;

    • 发布于 2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 也许在你现在所用的环境下确实如你所说,但是换个环境可能就不一样了,有些环境下把8位以上的数据存在一个8位的变量里甚至可能会出错
    • 发布于2019-03-16
    • 举报
    • 评论 0
    • 2
    • 0

  • 是的,我也觉得这个操作是多余的,可以不加
    • 发布于2019-03-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个不是高位自动补0,而是保证高位是0度问题。这样的操作更安全。
    • 发布于2019-03-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 上保险,也许你换个编译环境或平台就可能会出问题,我遇到过
    • 发布于2019-03-16
    • 举报
    • 评论 0
    • 0
    • 0

  • 这只是一种习惯上的操作,你这里将tbuf定义为unsigned char型的,就没有所谓,如果是一个short或者int型,这里就有区别了


    • 发布于2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

  • &0xff确保了第八位以上的数据会自动归零,这个选项一般是针对short和int类型的,char类型的第八位在溢出之后自动归零,unsigned char的第八位也可配置,也就不需要&0xff。

    • 发布于2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 防止数据出现错误,保证了数据的高位都是0
    • 发布于2019-03-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于16位数移位到8位寄存器的移位操作的问题