zoukankan      html  css  js  c++  java
  • 位运算总结

    python位运算符:python的位运算符是把数字看作二进制来进行计算的。
    按位与(&):如果两个二进位都为1,则该位结果为1,否则为0
    按位或(|):只要一个为1,则为1,否则为0
    按位异或(^):两个二进位相异为为1(即两个二进位要相反),否则为0
    取反(~):对数据的每个二进制位取反,即把1变0,把0变1
    左移动:运算数的各二进位全部向左移若干位
    右移动:运算数的各二进位全部向右移若干位
    其中,c++语言中,对于左右移动,在左移n位的时候,最左边n位被遗弃,同时右边布上n个0;右移n位的时候复杂一点,如果数字是一个无符号数值,则用0补上左边的n位,如果数字是一个有符号数值,则用数值的符号为填充左边的n位,也就是说,正数就填充0,负数就填充1

    下面看题目:
    题目一:
    输入一个整数,输出该数二进制表示中1的个数。
    public class Solution { 
        public int NumberOf1(int n) { 
            int count = 0; 
            while(n!= 0){ 
                count++; 
                n = n & (n - 1); 
             } 
            return count; 
        } 
    } 
    
    #把一个整数减去1,再和原来的数做与运算,就会把该整数最右边的1变成0

    结论一:把一个整数减去1,再和原来的数做与运算,就会把该整数最右边的1变成0

    题目二:
    用一条语句判断一个整数是不是2的整数次方。
    结论2:一个整数如果是2的整数次方,那么他的二进制表示中有且只有一位是1,其他位都是0.根据前面的分析,把这个数减去1之后再和他自己做与运算,这个整数中唯一的1就会变成0.

    题目三:
    输入整数m和n,计算需要改变m的二进制表示中多少位才能得到n。
    结论:第一步求这两个数的异或运算,第二步,统计异或结果的二进制表示中1的个数


    题目四:
    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

    结论四:

    此题考察的是异或运算的特点:即两个相同的数异或结果为0。

    此题用了两次异或运算特点:
    (1)第一次使用异或运算,得到了两个只出现一次的数相异或的结果。
    (2)因为两个只出现一次的数肯定不同,即他们的异或结果一定不为0,一定有一个位上有1。另外一个此位上没有1,我们可以根据此位上是否有1,将整个数组重新划分成两部分,一部分此位上一定有1,另一部分此位上一定没有1,然后分别对每部分求异或,因为划分后的两部分有这样的特点:其他数都出现两次,只有一个数只出现一次。因此,我们又可以运用异或运算,分别得到两部分只出现一次的数。 
     
    题目五:
    不适用新的变量,交换两个变量的值。
    解法:
    a=a^b
    b=a^b
    a=a^b
     











  • 相关阅读:
    【原】基础篇:第九篇,Ext组件系列之field组件的基本用法
    为什么要返回byte[]
    Migrate Mysql to SQL Server 2005
    关于编码规范
    RPM删除包的时候报127错误
    邮政储蓄的线上故障
    string.replaceAll与StringUtils.replace
    EJB工作原理
    OJB Connection
    找工作
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/10635084.html
Copyright © 2011-2022 走看看