2.4.位运算实战演练1

原创 2016年05月30日 22:39:23

2.4.位运算实战演练1

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?

版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

19.位运算实战演练

19.1.简单的实战 19.2.稍微复杂的实战 19.3.使用宏定义完成位运算 19.4.截取变量的部分连续位
  • Rston
  • Rston
  • 2016-03-19 20:50
  • 166

2.5.位运算实战演练2--技术升级:用宏定义来完成位运算

2.5.技术升级:用宏定义来完成位运算直接用宏来置位、复位(最右边为第1位),我们先来看看最终结果是什么样的,然后我们再来一步一步的分析// 把x的第n位置一 #define SET_NTH_...

位运算简介及实用技巧(四):实战篇

http://www.matrix67.com/blog/archives/268     下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕...

位运算简介及实用技巧(四):实战篇

下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕不提供C语言了。代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和状态压缩DP方面...

位运算简介及实用技巧(四):实战篇 [Matrix67]

Problem : 费解的开关 题目来源     06年NOIp模拟赛(一) by Matrix67 第四题 问题描述     你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一...

位运算简介及实用技巧(四):实战篇

原文链接:http://www.matrix67.com/blog/archives/268     下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写...

位运算简介及实用技巧(四):实战篇

下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕不提供C语言了。代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和状态压缩DP方面...

Android动画机制(1):帧动画、补间动画详解及实战演练

Android目前包含四种动画:Property Animation、View Animation、Drawable Animation、SVG,其中,属性动画被引入于Android 3.0,它可应用...

《网蜂A8实战演练》——1.LED驱动

LED 原理图都网蜂科技的 Webee210 核心板上,如下:

C语言位运算的应用(1)

如果能巧妙地应用位运算来解决一些问题,可能会带来意想不到的惊喜! 以下是一些常见的位运算的应用; 1,不用中间变量来交换两个数的数值。 首先我们可以用 “+ - * / ” 四则运算符来解决这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)