• 关于位运算的几个题


    关于位运算的几个题

    1.给一个整形数a,设置a的bit3,保证其他位不变
    分析:
    第一步:设置 a 的 bit3

     a | = 1<<3

    2.给一个整形数a,设置a的bit3-bit7,保证其他位不变
    分析:
    第一步:从bit3 -bit7共5位 ,先设置bit0-bit4
    第二步:bit0-bit4左移到bit3-bit7
    第三步:寄存器中原来的数和新构建的特定数位或

     a | =0x1f<<3

    3.给一个整形数a,清除a的bit15,保证其他位不变
    分析:
    第一步:清除bit15,则bit15是0,其他位是1
    第二步:要构建的特定数1多0少,则使用取反 ~ , bit15是1,其他位是0,再取反

     a & = ~(0x1<<15)

    4.给一个整形数a,清除a的bit15-bit23,保证其他位不变
    分析:
    第一步:清除bit15-bit23,则bit15-bit23是0,其他位是1
    第二步:要构建的特定数1多0少,则使用取反 ~ , bit15-bit23是1,其他位是0,再取反
    第三步:寄存器中原来的数和新构建的数位与

      a & =~(1ff<<15)

    5.给定一个整形数a,取出a的bit3-bit8
    分析:
    第一步:除了bit3-bit8其他位清零,只保留需要的位上的数
    第二步:将bit3-bit8右移3位

     a & =(0x3f<<3);  //清除除了bit3-bit8的位
     a >>=3;          //右移到最低位进行读取

    6.用C语言给寄存器的bit7-bit17赋值937(其他位不能受影响)
    注意:我们不知道寄存器中bit7*bit17原来的,就无法构建特定的二进制数
    思路:
    第一步:先将bit7-bit17清零
    第二步:在写入937

     a &= ~0x7ff<<7;  //清零  
      a |= 937<<7       //写入937

    7.给bit7-bit17中的值加17(其他位不受影响)
    思路:
    第一步:先读出bit7-bit17中的值
    第二步:增加17
    第三步:寄存器bit7-bit17清零
    第四步:写入第二步中算出的数

     //第一步:把寄存器中的bit7-bit17取出来来放到tem中
       tem = a & (7ff<<7)
       //右移到最低位并读出原来的数
       tem >>=3;
    
       //第二步:增加17
       tem +=17;
    
       //第三步:寄存器bit7-bit17清零
        a &=~(0x7ff<<7);
    
        //第四步:写入
        a |=tem<<7;

    8.给寄存器bit7-bit17赋值937,同时给bit21-bit25赋值17
    思路:第一步:先将bit7-bit17,bit21-bit25清零
    第二步:得出937和17的对应的位
    第三步:写入

      //原来寄存器中的数
      unsigned int a =0xffffffff;
    
      //第一步:清零bit7-bit17,bit21-bit25
      a &=~((0x7ff<<7)|(0x1f<<21))
    
      //第二步:算出937和17以及其所对应的位,并写入
        a |=(937<<7)|(17<<21)

    9.思考:如何给寄存器bit7-bit17增加7,同时给bit21-bit25增加17?

  • 相关阅读:
    存储过程中Like没有数据?
    鼠标放上图片移动,字体移动
    Excel
    参数无效。区域性ID2155(0X086B)不是受支持的区域性
    JVM指令集及各指令的详细使用说明[转的]
    BTrace使用简介
    ST表
    树剖模板
    AjaxControlToolkit中的CalendarExtender被遮挡及日期格式本地化解决方法
    Using Beyond Compare with TFS
  • 原文地址:https://www.cnblogs.com/1024E/p/13209630.html
Copyright © 2020-2023  润新知