zoukankan      html  css  js  c++  java
  • 关于位运算的几个题

    关于位运算的几个题

    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?

  • 相关阅读:
    基本数据结构——栈
    错误 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:usersvs2013le
    Java内存区域
    VS2010 无法计算HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSBuildToolsVersions14.0@VCTargetPath处的属性表达式
    PHP高并发场景下的一点思路
    LINUX运维常用命令
    php7的一些新特性总结
    MySQL读写分离主从配置
    php 生成唯一id的几种解决方法
    浅谈mysql两种常用引擎MyIASM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/1024E/p/13209630.html
Copyright © 2011-2022 走看看