精华内容
下载资源
问答
  • 文章目录题目描述知识...先异或,再得到二进制位即可。 代码实现 //采用异或+进制转换 class Solution { public: int hammingDistance(int x, int y) { int res = x^y; int cnt=0; while(res!=0){ if((res % .

    题目描述

    在这里插入图片描述

    知识点

    位运算、进制转换

    结果

    在这里插入图片描述

    实现

    码前思考

    1. 先异或,再得到二进制位即可。

    代码实现

    //采用异或+进制转换
    class Solution {
    public:
        int hammingDistance(int x, int y) {
            int res = x^y;
            int cnt=0;
            
            while(res!=0){
                if((res % 2) == 1){
                    cnt++;
                }
                res = res/2;
            }
    
            return cnt;
        }
    };
    

    码后反思

    1. 真羞耻,忘记十进制怎么转二进制了。。。之前总结过的,在这里👉进制转换
    2. 可以通篇使用位运算符:
      class Solution {
      public:
          int hammingDistance(int x, int y) {
              //计算异或的值
              int n = x ^ y;
      
              //计算
              int counter = 0;
      
              //将每一个元素左移然后进行计算
              while ( n > 0)
              {
                  counter += n & 1;
                  n >>= 1;
              }
      
              return counter;
          }
      };
      
    展开全文
  • 在看HashMap 源码时发现,HashMap 的 put 方法中用到了位运算,与运算,异或运算等二进制运算。对于这种平时不常用的知识点,很容易遗忘。同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客...

    前言:

    在看HashMap 源码时发现,HashMap 的 put 方法中用到了位运算,与运算,异或运算等二进制运算。对于这种平时不常用的知识点,很容易遗忘。同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客的目的就是整理出java技术中常用的二进制运算,一方面方便自己查阅和积累,另一方面也想分享给那些刚好看到这篇博文的同学,希望能帮助到你。

    注意:java中所有的二进制操作符都是操作数字的补码(既:十进制转换为二进制) 

    & (与运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数都是1时才为1,否则为0
    2.案例:
        int a = 3 & 2 ; 
        System.out.println(a); //结果为 2 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 & 2 
            00000000 00000000 00000000 00000011
        &   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000010            二进制是2
    

    | (或运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,当两个对位数只要有一个是1则为1,否则为0
    2.案例:
        int a = 3 | 2 ; 
        System.out.println(a); //结果为 3 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 | 2 
            00000000 00000000 00000000 00000011
        |   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000011            该补码对应十进制为3  
    

    ^ (异或运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数字不同时为1,相同为0
    2.案例:
        int a = 3 ^ 2 ; 
        System.out.println(a); //结果为 1 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 ^ 2 
            00000000 00000000 00000000 00000011
        ^   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000001           该补码对应十进制为1 
    

    ~ (非运算符)

    1.特点:一元操作符,
    2.规则:非运算即取反运算,在二进制中1变0,0变1
    3.案例:
        int a = ~ 2 ; 
        System.out.println(a); //结果为 -3
    4.分析:
         2的二进制补码表示为:
            00000000 00000000 00000000 00000010
         运算:
          ~     00000000 00000000 00000000 00000010
        ------------------------------------------
             11111111 11111111 11111111 11111101   //该补码对应十进制为:-3
    

    <<(左移运算符)

    1.形式: m << n 
    2.特点:二元操作符,m数字二进制向左移动n位的结果;结果相当于: m*(2的n次方)
    3.案例:
        int a = 3 << 2 ; 
        System.out.println(a); //结果为 12 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
    
        运算:3 << 2 
                00000000 00000000 00000000 00000011
        << 2    
        -------------------------------------------
                00000000 00000000 00000000 00001100            该补码对应十进制为12 
    

    >> (右移运算符)

    1.形式: m >> n 
    2.特点:二元操作符,m数字二进制向右移动n位的结果;结果相当于: m / (2的n次方);
    正数左补0,负数左补1.
    3.案例:
        int a = 3 >> 2 ; 
        System.out.println(a); //结果为 0 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
    
        运算:3 >> 2 
                00000000 00000000 00000000 00000011
        >> 2    
        -------------------------------------------
                00000000 00000000 00000000 00000000           该补码对应十进制为0
    5.注意: 最后的11向右移动两位,正好补上左边补上0; 所以结果为0 
    

    >>> (无符号右移运算符)

    1.二元操作符
    2.特点:它使用0扩展,无论正负都在最高位补0 
    3.案例:
        int a = 3 >>> 2 ; 
        System.out.println(a); //结果为 0 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        运算:
            00000000 00000000 00000000 00000011
        >>>2
        ------------------------------------------
            00000000 00000000 00000000 00000000        该补码对应十进制为0
    

    <<< (无符号左移运算符)

    不好意思二进制没有无符号左移运算。

    注意:

    位运算中左移跟符号没有关系的, 因为最高位就是符号位
    例如8位的byte中最高位如果是 1那就表示负数 如果是左移一位, 
    那么最高位就会丢掉, 最低位补0 1111 1111 << 1 就会变成 1111 1110

    结语:

    以上就是关于java中常用的二进制运算,值得一提的是。形如:HashMap 中为何将数组的 

    DEFAULT_INITIAL_CAPACITY 默认值设为 1 << 4 而不是直接赋值为 16呢,不就是因为左移运算比赋值运算更快嘛。

    展开全文
  • public class MainTest { public static void main(String[] args) { // 1000 10 1010 --10 System.out.println(8|2); // 1000 10 0000---0 //与运算运算规则是0&0=0; 0&a...
    public class MainTest {
        public static void main(String[] args) {
            // 1000  10  1010 --10
            System.out.println(8|2);
            // 1000  10    0000---0
            //与运算的运算规则是0&0=0;  0&1=0;   1&0=0;    1&1=1;即:两位同时为“1”,结果才为“1”,否则为0。
            System.out.println(8&2);
            //异或运算符,2进制运算的 0 ^ 1 得 1   1 ^ 1 得 0   0 ^ 0 得 0  1 ^ 0 得 1
            //1000 10 ----1010--10
            System.out.println(8^2);
            
        }
    }
    
    展开全文
  • 用^代表事件相反一、与 有0出0;全1出1 A B F=AB 0 0 0 0 1 0 1 0 ...、或 有1出1;全0出0 A B F=A+B 0 0 0 0 1 1 1 0 1 1 1 1 三、非 有1出0;有0出1。 A F = ^A 0 1

    运算技巧

    a&(a-1)    除去a二进制中最后一位1
    
    
    a XOR 0 = a   a与0的异或还是a
    a XOR a = 0   a与a的异或为0
    a XOR b XOR a = b  可用于去重
    

    LeetCode : 136. Single Number 单一数字

    一、与

    有0出0;全1出1

    A B F=AB
    0 0 0
    0 1 0
    1 0 0
    1 1 1

    二、或

    有1出1;全0出0

    A B F=A+B
    0 0 0
    0 1 1
    1 0 1
    1 1 1

    三、非

    用^代表事件相反

    有1出0;有0出1。

    A F = ^A
    0 1
    1 0

    四、与非

    与操作相反

    A B F = ^(A·B)
    0 0 1
    0 1 1
    1 0 1
    1 1 0

    五、或非

    或操作相反

    A B F = ^(A+B)
    0 0 1
    0 1 0
    1 0 0
    1 1 0

    六、与或非

    七、异或

    相同得0;相得1

    A B F = ^AB + A^B
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    八、同或

    得1;相异得0

    A B F = AB + AB
    0 0 1
    0 1 0
    1 0 0
    1 1 1

    首先记住与、或、非操作。与非、或非只需要先按照与、或判断,再非一下。异或、与或关键词在于《异:不同》为1、《与:相同》为1。

    展开全文
  • 运算二进制位的对比,对比规则是1:1=1、0:0=0、1:0=0 案例:将数值转换成二进制,然后对比双方二进制每一位的值 100的二进制:1 1 0 0 1 0 0 15的二进制: 1 1 1 1 100 & 15 = 0 0 0 0 1 0 0 ...
  • 二进制异或运算二进制数中1个数的奇偶性联系,也就是说有三种情况,1.拥有奇数个1的二进制数与拥有奇数个1的二进制数的异或运算。2.拥有奇数个1的二进制数与拥有偶数个1的二进制数的异或运算。3.拥有偶数个1的...
  • JavaScript进制转化十进制数字向其他进制转化十进制转二进制十进制转八进制其他进制向十进制转化八进制转化为十进制二进制转化为十进制 十进制数字向其他进制转化 十进制转二进制 var num=2 var a=num.toString(2) ...
  • java二进制运算

    2020-08-20 18:57:25
    在讲二进制运算之前,首先得知道原码,反码,补码的概念。举个例子。 二进制运算 & 按位逻辑与,都为1则为1,否则为0; | 按位或,都为0则为0,有一个为1则为1; ^ 异或,两个都相同为0,两个不相同为1,11=0...
  • 二进制运算

    2019-02-13 16:08:10
    二进制运算位运算符术语 位运算符 位运算符 &amp;amp;amp;amp;amp;amp; 按位与 | 按位或 ^ 按位异或 ~ 取反 &amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;lt; 左移 &amp;amp;amp;amp;amp;gt;&...
  • 异或运算又称XOR或EOR 二进制中为对应位进行运算,若相同则为0,不同则为1. 简单性质: 0与x(任何数)异或运算得x 可以使用交换律和结合律 应用1:判断两个数是否相等  根据异或运算的定义,当两个数相同...
  • a = 6,二进制表示为 0110 b = 4 ,二进制表示为 0100 我们需要知道,上下对齐后,哪几位需要进位,哪几位不需要进位。而对于其中的某一位,只会出现这两种情况的其中一种。另外,进位后是否还需要进位,这可以放到...
  • 参考链接: https://blog.csdn.net/xiaopihaierletian/article/details/78162863 ... 负数二进制表示: 原码二进制表示(负号不表示)—— 取反(反码) ——补码(...
  • 二进制运算 public class Dome06 { public static void main(String[] args) { /* A = 0011 1100 B = 0000 1101 A&B(与) = 0000 1100 A/B(或) = 0011 1101 A^B(异或)= 0011 0010 ~B(非) =1111 ...
  • 什么是异或_异或运算异或运算的作用 异或,是一个数学运算符,英文为exclusive OR,缩写为xor,应用于逻辑运算异或的数学符号为“⊕”... 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下...
  • 十进制 二进制 15 1111 10 1010 以二者的二进制相比较 未获运算符 1111 |||| 1010 1111=15 位与运算符 1111 &&&& 1010 1010=10 位异或运算符 1111 ^^^^ 1010 0101=5
  • 二进制运算小结

    2014-03-05 13:12:29
    最近在看密码学的书籍,对二进制运算提起了兴趣,今晚总结了一下感觉别有所获. A,B两个数进行位运算,情况如下: A     B 0 1 或 与 异或 或 与 异或 ...
  • 解析: 很明显这个题要用二进制运算去解决。 二进制的按位相加实际等效于异或。 二进制的每位的进位计算等效于按位与,然后左移。 进位加上按位相加结果就是最终结果。 重复使用前两步,直到没有进位为止。 代码...
  • 计算机里的数字表示方式和存储格式就是二进制的,所以用二进制,速度很快 2.十进制转二进制 参考:...
  • (a-1) 除去a二进制中最后一位112a XOR 0 = a a与0的异或还是aa XOR a = 0 a与a的异或为0a XOR b XOR a = b 可用于去重123LeetCode : 136. Single Number 单一数字一、与有0出0;全1出1A B F=AB0 0 00 1 01 0 01...
  • 二进制运算技巧

    千次阅读 2015-10-21 14:08:40
    假设都在x86或x86_64架构CPU上进行运算二进制基本运算包括,加减乘除、与、或、异或、同或、移位等 假设n 为 32 位整形数,取正整数n除以8的余数 : n & 0x07 假设n 为 32 位整形数,取正整数n除以16的余数 :...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,409
精华内容 1,763
关键字:

异或二进制运算