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
  • 201

【位运算】实现加减乘除、取最高位1

位操作实现加减乘除四则运算 2013-02-07 23:09:50 分类: C/C++ 1. 题目描述 如何使用位操作分别实现整数的加减乘除四种运算? 2. 解决方案 需要...
  • brandohero
  • brandohero
  • 2014年09月27日 10:25
  • 1594

位运算--统计一个数的二进制序列中1的个数

给出一个十进制数,求出该数的二进制序列中1的个数。比如 15 的二进制序列是 00000000  00000000  00000000 00001111   1的个数是4. 下边将给出几种不同的解...
  • peiyao456
  • peiyao456
  • 2016年06月21日 00:16
  • 1497

只用位运算来实现整数的加减乘除四则运算

问题一: 位运算实现加法 问题二:只用加法实现减法、乘法、除法 问题三:只用加法实现1+2+3+...+n,(循环、判断语句也不用) 下面逐一解决: 问题三: 方法1:只用...
  • luckyjoy521
  • luckyjoy521
  • 2013年09月05日 22:21
  • 4522

简简单单学会C#位运算

一、理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二、理解数字进制 ...
  • jiangfei009003
  • jiangfei009003
  • 2016年10月07日 23:18
  • 2358

全网最新:Netty源码剖析&NIO+Netty5各种RPC架构实战路线

深入浅出Netty源码剖析
  • yixueit
  • yixueit
  • 2017年12月14日 17:56
  • 32

位运算的威力

昨天写了篇有关集合的东西,中间用到了位运算,看起来还是有点纠结的,今天在这里详细解释一下。 (欢迎转载,转载请注明出处,谢谢。) 一、有关位运算的基础知识总结 位运算包括:&(与)、|(或)...
  • u014150409
  • u014150409
  • 2016年07月14日 23:18
  • 1076

java中的位运算也是很强大的

package newpackage; public class WeiYunSuan { /** * 这题主要考查的是整型数据在内存的机器码的问题,通过短除法来求1的个数 另外java中的&...
  • benpao00
  • benpao00
  • 2016年08月17日 21:15
  • 414

位运算(2)-- 集合中的位运算

一、基本概念当集合元素个数较少时,可以用二进制来表示。集合{0, 1, ..., n - 1}的子集S可以用如下方法编码成整数: f(S)=∑i∈S2if(S) = \sum_{i \in S}{2...
  • xushao_Movens
  • xushao_Movens
  • 2016年08月13日 14:24
  • 446

位运算(一):二进制中1的个数

一、题目:求二进制中1的个数        请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。        例如:10 二进制表示为:1010 ,该函数输出二 二、最初思路:       ...
  • XHfight
  • XHfight
  • 2016年05月29日 23:22
  • 900
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.4.位运算实战演练1
举报原因:
原因补充:

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