zoukankan      html  css  js  c++  java
  • 位运算之加减乘除 练习题【★★★★】【★★★★】【★★★★】【★★★★】【★★★★】

    知识点 or  and not xor

    1、如何通过位运算判断一个数是奇数还是偶数?

     一个数如果是奇数的话,那么他的二进制最后一位一定为1. 
    比如 3, 他的二进制表示为 11 而 1 的二进制为 01 ,两个相与,则为1. 而偶数的话则就为0了

    2、如何读取二进制数中的某一位的值?【★★★★】

    ②通过右移操作符(>>)、按位与操作符(&)实现

    Example:当num=10(1010),通过右移操作num>>i,二进制向右移动i位。

    //i=0,num>>0,右移0位,此时(1010)&(0001)=0

    //i=1,num>>1,右移1位,此时(0101)&(0001)=1,count++

    //i=2,num>>2,右移2位,此时(0010)&(0001)=0

    //i=3,num>>3,右移3位,此时(0001)&(0001)=1,count++

    ……

    因为二进制共32位,所以循环要执行32次后结束,得到count为2。

    缺点:不够高效,必须循环32次。

    ③通过按位与操作符(&)巧妙运算实现

    Example:  当num=15时,

    1//num&(num-1)=(1111)&(1110)=(1110)    

    2//num&(num-1)=(1110)&(1101)=(1100)   

    3//num&(num-1)=(1100)&(1011)=(1000)   

    4//num&(num-1)=(1000)&(0111)=0  ,循环停止。共执行4次while循环。

    3、如何设置二进制数中的某一位的值?【★★★★】

     用与运算

    4、2*8的最高效的实现方式

     0000 0010 <<3位   0001 0000

    位运算,使用左移运算是最高效的,把一个数向左移动n位相当于把该数乘以2的n次方,因此当乘法运算中的某个数字满足这个特点时,就可以用移位操作来代替乘法操作,从而提高效率,8向左移一位就是16

    00001000<<1位00010000

    5、使用异或对 87AD6 进行加密后再进行解密,加解密密钥:5

     1000 0111 1010 1101 0110 

     0000 0000 0000 0000 0101   

     1000 0111 1010 1101 0011   加密结果

    解密:

     1000 0111 1010 1101 0011

     0000 0000 0000 0000 0101   

    1000 0111 1010  1101 0110 解密结果

    6、八进制数2-5 在计算器中的的结果是:1777777777777777777775  为什么?

        2+(-5)

    在计算

               

    77、只用逻辑运算计算2-3=?(涉及内容:逻辑运算、移位、数据宽度)

    以八位二进制为例,下面是计算过程

    异或
    0000 0010
    1111 1101
    1111 1111 结果


    0000 0010
    1111 1101
    0000 0000 无进位

    1111 1111 无符号数是FF,有符号数是负1(-1)

  • 相关阅读:
    dede标签:定义文件夹
    SendCloud邮件中为什么会显示代发
    中国天气网天气预报接口api
    话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
    微信公众号tp3.2放进Model无效,几种实例化的方法试过,还是提示无法提供服务...
    WCF服务编程读书笔记(5):操作
    spingmvc relevent article
    testng
    sts 配置
    一个spring mvc 的例子,带源码的,
  • 原文地址:https://www.cnblogs.com/pufan/p/12081393.html
Copyright © 2011-2022 走看看