精华内容
下载资源
问答
  • 一、二进制运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> ...

    一、二进制位运算

    1. 按位与(&)

    位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。

    按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。

    例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1

    特殊用法:

    (1)与0相与可清零。

    (2)与1相与可保留原值,可从一个数中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需结果。

    2. 按位或(|)

    两位只要有一位为1,结果则为1,即1|1=1,1|0=1,0|1=1,0|0=0。

    特殊用法:

    (1)与0相或可保留原值。

    (2)与1相或可将对应位置1。例如,将X=10100000的低四位置1,使X | 00001111 = 10101111即可。

    3. 异或运算(^)

    两位为“异”,即一位为1一位为0,则结果为1,否则为0。即1^1=1,1^0=0,0^1=0,0^0=1。

    特殊用法:

    (1)使指定位翻转:找一个数,对应X要翻转的各位为1,其余为0,使其与X进行异或运算即可。例如,X=10101110,使低四位翻转,X ^ 00001111 = 10100001。

    (2)与0相异或保留原值。例如X ^ 00000000 = 10101110。

    (3)交换两变量的值。(比借助容器法、加减法效率高)原理:一个数对同一个数连续两次进行异或运算,结果与这个数相等。

    因此,交换方法为:A = A ^ B,B = A ^ B,A = A ^ B。

    4. 取反(~)

    将一个数按位取反,即~ 0 = 1,~ 1 = 0。

    5. 左移(<

    将一个数左移x位,即左边丢弃x位,右边用0补x位。例:11100111 << 2 = 10011100。

    拓展:

    ==原码==:一个整数按照绝对值大小转换为二进制即为原码;

    ==反码==:将二进制数按位取反,得到的即为反码;

    ==补码==:反码加1即为补码。

    ==由于计算机底层硬件的限制,负数均使用补码表示。==

    若左移时舍弃的高位全为0,则每左移1位,相当于该数十进制时乘一次2。

    例:11(1011) << 2 = 44(11表示为1011时实际上不完整,若计算机中规定整型的大小为32bit,则11的完整二进制形式为00000000 00000000 0000000 00001011)

    6. 右移(>>)

    将一个数右移若干位,右边舍弃,正数左边补0,负数左边补1。每右移一位,相当于除以一次2。

    例:4 >> 2 = 1,-14 >> 2 = -4。

    7. 无符号右移(>>>)

    将一个数右移若干位,左边补0,右边舍弃。

    例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820

    二、Java内置的进制转换

    用途

    方法

    十进制转成十六进制

    Integer.toHexString(int i)

    十进制转成八进制

    Integer.toOctalString(int i)

    十进制转成二进制

    Integer.toBinaryString(int i)

    十六进制转成十进制

    Integer.valueOf("FFFF", 16).toString()

    八进制转成十进制

    Integer.valueOf("2234", 8).toString()

    二进制转成十进制

    Integer.valueOf("0110", 2).toString()

    感谢大家的阅读和对谷谷点程序的支持。

    展开全文
  • java二进制运算

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

    前言

    在讲二进制运算之前,首先得知道原码,反码,补码的概念。举个例子。
    在这里插入图片描述

    二进制运算

    • & 按位逻辑与,都为1则为1,否则为0;
    • | 按位或,都为0则为0,有一个为1则为1;
    • ^ 异或,两个都相同为0,两个不相同为1,11=0,10=1,0^0=0
    • ~ 按位取反,包括符号位;
    • << 保留符号位,其余的向左移动N位,整数和负数都是低位补0,相当于乘以2的N次方,这种方式用来做2的整数倍乘法运算效率很高。
    • .>> 保留符号位,其余的向右移动N位,整数高位补0,负数高位补1
    • . >>> 将符号位也一起移动,高位补0,正数跟>>一样,负数因为符号位是1,移动后的结果可能不是我们预期的。
    • 对于 int 类型的整数移位 a >> b, 当 b>32 时,系统先用 b 对 32 求余(因为 int 是 32 位),得到的结果才是真正移位的位数,例如,a >> 33 和 a >> 1 的结果相同,而 a >> 32 = a;对于 long 类型的整数移位 a >> b, 当 b>64 时,系统先用 b 对 64 求余(因为 long 是 64 位),得到的结果才是真正移位的位数;当进行移位运算时,只要被移位的二进制码没有发生有效位的数字丢失(对于正数而言,通常指被移出去的位全部是 0),不难发现左移 n 位就相当于乘以 2 的 n 次方,右移 n 位则是除以 2 的 n 次方;
    • ~n=-(n+1),3的按位取反 = -4
    • -n&n = 整数n的二进制字符串最后一个1所代表的整数,比如-10 & 10 = 2
    • == n&(n-1) = 整数n的二进制串去掉最后一个1之后 的整数 ==,比如 10 & 9 = 8

    思考题1

    int有32位,有什么方法可以判断这个int中有多少位是1?
    可以直接用Integer.bitCount函数,也可以自定义一个。

        private static int cnt(int value){
            int count = 0;
            while(value != 0){
                value &= (value -1);
                count++;
            }
            return count;
        }
    

    测试代码

        public static void main(String[] args) {
            int a = 10;  //00000000000000000000000000001010
            int b = -10; //11111111111111111111111111110110
            System.out.println("a="+a);
            System.out.println("a的二进制表示:");
            System.out.println(Integer.toBinaryString(a));
            System.out.println("a的二进制表示中1的位数="+Integer.bitCount(a));
            System.out.println("a的二进制表示中1的位数="+cnt(a));
    
            System.out.println("=====================");
            System.out.println("b="+b);
            System.out.println("b的二进制表示:");
            System.out.println(Integer.toBinaryString(b));
            System.out.println("b的二进制表示中1的位数="+Integer.bitCount(b));
            System.out.println("b的二进制表示中1的位数="+cnt(b));
        }
    

    结果输出

    a=10
    a的二进制表示:
    1010
    a的二进制表示中1的位数=2
    a的二进制表示中1的位数=2
    =====================
    b=-10
    b的二进制表示:
    11111111111111111111111111110110
    b的二进制表示中1的位数=30
    b的二进制表示中1的位数=30
    
    Process finished with exit code 0
    

    思考题2

    有a,b两个整数,如何用位运算实现a+b??
    主要考虑用 位异或(也称不进位加) , 按位与 运算来实现。

        public static int add(int a ,int b){
            // 异或运算有一个别名叫做:不进位加法
            // 那么a ^ b就是a和b相加之后,该进位的地方不进位的结果
            // 然后下面考虑哪些地方要进位,自然是a和b里都是1的地方
            // a & b就是a和b里都是1的那些位置,a & b << 1 就是进位之后的结果。
            // 所以:a + b = (a ^ b) + (a & b << 1)
            // 比如:1 + 1 = (1 ^ 1) + (1 & 1 << 1)
            // 可以知道,这个过程是在模拟加法的运算过程,进位不可能
            // 一直持续,所以b最终会变为0。因此重复做上述操作就可以
            // 求得a + b的值。
            while (b != 0) {
                int bujinwei_jia = a ^ b;
                int jinwei = (a & b) << 1;
                a = bujinwei_jia;
                b = jinwei;
            }
            return a;
        }
    
    展开全文
  • 一、二进制运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> ...

    一、二进制位运算

    1. 按位与(&)

    位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。

    按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。

    例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1

    特殊用法:

    (1)与0相与可清零。

    (2)与1相与可保留原值,可从一个数中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需结果。

    2. 按位或(|)

    两位只要有一位为1,结果则为1,即1|1=1,1|0=1,0|1=1,0|0=0。

    特殊用法:

    (1)与0相或可保留原值。

    (2)与1相或可将对应位置1。例如,将X=10100000的低四位置1,使X | 00001111 = 10101111即可。

    3. 异或运算(^)

    两位为“异”,即一位为1一位为0,则结果为1,否则为0。即1^1=1,1^0=0,0^1=0,0^0=1。

    特殊用法:

    (1)使指定位翻转:找一个数,对应X要翻转的各位为1,其余为0,使其与X进行异或运算即可。例如,X=10101110,使低四位翻转,X ^ 00001111 = 10100001。

    (2)与0相异或保留原值。例如X ^ 00000000 = 10101110。

    (3)交换两变量的值。(比借助容器法、加减法效率高)原理:一个数对同一个数连续两次进行异或运算,结果与这个数相等。

    因此,交换方法为:A = A ^ B,B = A ^ B,A = A ^ B。

    4. 取反(~)

    将一个数按位取反,即~ 0 = 1,~ 1 = 0。

    5. 左移(<

    将一个数左移x位,即左边丢弃x位,右边用0补x位。例:11100111 << 2 = 10011100。

    拓展:==原码==:一个整数按照绝对值大小转换为二进制即为原码;

    ==反码==:将二进制数按位取反,得到的即为反码;

    ==补码==:反码加1即为补码。

    ==由于计算机底层硬件的限制,负数均使用补码表示。==

    若左移时舍弃的高位全为0,则每左移1位,相当于该数十进制时乘一次2。

    例:11(1011) << 2 = 44(11表示为1011时实际上不完整,若计算机中规定整型的大小为32bit,则11的完整二进制形式为00000000 00000000 0000000 00001011)

    6. 右移(>>)

    将一个数右移若干位,右边舍弃,正数左边补0,负数左边补1。每右移一位,相当于除以一次2。

    例:4 >> 2 = 1,-14 >> 2 = -4。

    7. 无符号右移(>>>)

    将一个数右移若干位,左边补0,右边舍弃。

    例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820

    二、Java内置的进制转换用途方法十进制转成十六进制Integer.toHexString(int i)

    十进制转成八进制Integer.toOctalString(int i)

    十进制转成二进制Integer.toBinaryString(int i)

    十六进制转成十进制Integer.valueOf("FFFF", 16).toString()

    八进制转成十进制Integer.valueOf("2234", 8).toString()

    二进制转成十进制Integer.valueOf("0110", 2).toString()

    感谢大家的阅读和对华域联盟的支持。

    展开全文
  • java二进制运算基础知识点详解发布于 2020-4-15|复制链接在本文里小妖给大家分享了关于java二进制运算基础知识点以及实例代码内容,需要的朋友们参考学习下。一、二进制位运算1. 按位与(&)位运算实质是将参与...

    java二进制运算基础知识点详解

    发布于 2020-4-15|

    复制链接

    在本文里小妖给大家分享了关于java二进制运算基础知识点以及实例代码内容,需要的朋友们参考学习下。

    一、二进制位运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1特殊用法:(1)与0相与可清零。(2)与1相与可保留原值,可从一个数中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需结果。2. 按位或(|)两位只要有一位为1,结果则为1,即1|1=1,1|0=1,0|1=1,0|0=0。特殊用法:(1)与0相或可保留原值。(2)与1相或可将对应位置1。例如,将X=10100000的低四位置1,使X | 00001111 = 10101111即可。3. 异或运算(^)两位为“异”,即一位为1一位为0,则结果为1,否则为0。即1^1=1,1^0=0,0^1=0,0^0=1。特殊用法:(1)使指定位翻转:找一个数,对应X要翻转的各位为1,其余为0,使其与X进行异或运算即可。例如,X=10101110,使低四位翻转,X ^ 00001111 = 10100001。(2)与0相异或保留原值。例如X ^ 00000000 = 10101110。(3)交换两变量的值。(比借助容器法、加减法效率高)原理:一个数对同一个数连续两次进行异或运算,结果与这个数相等。因此,交换方法为:A = A ^ B,B = A ^ B,A = A ^ B。4. 取反(~)将一个数按位取反,即~ 0 = 1,~ 1 = 0。5. 左移(将一个数左移x位,即左边丢弃x位,右边用0补x位。例:11100111 拓展:

    ==原码==:一个整数按照绝对值大小转换为二进制即为原码;

    ==反码==:将二进制数按位取反,得到的即为反码;

    ==补码==:反码加1即为补码。

    ==由于计算机底层硬件的限制,负数均使用补码表示。==

    若左移时舍弃的高位全为0,则每左移1位,相当于该数十进制时乘一次2。例:11(1011) 6. 右移(>>)将一个数右移若干位,右边舍弃,正数左边补0,负数左边补1。每右移一位,相当于除以一次2。例:4 >> 2 = 1,-14 >> 2 = -4。7. 无符号右移(>>>)将一个数右移若干位,左边补0,右边舍弃。例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820二、Java内置的进制转换

    用途

    方法

    十进制转成十六进制

    Integer.toHexString(int i)

    十进制转成八进制

    Integer.toOctalString(int i)

    十进制转成二进制

    Integer.toBinaryString(int i)

    十六进制转成十进制

    Integer.valueOf("FFFF", 16).toString()

    八进制转成十进制

    Integer.valueOf("2234", 8).toString()

    二进制转成十进制

    Integer.valueOf("0110", 2).toString()

    展开全文
  • Java二进制运算

    千次阅读 2019-05-16 15:51:09
    ====Float转化为二进制=============================================================================   C中Float如何存储:   17.625 =》17+ 0.625    17=> 0001 0001  0.625=> 5/8 => 1/8+ 1/2 =>...
  • 在本文里小编给大家分享了关于java二进制运算基础知识点以及实例代码内容,需要的朋友们参考学习下。
  • Java二进制表示法首先了解下二进制,二进制是相对十进制而言的,当然还有八进制,十六进制等等,我们常用的都是十进制,计算机用的都是二进制,而符号表示常用十六进制。二进制就是只有0、1两个值表示的数,规则是逢...
  • 一、二进制运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> ...
  • 一、二进制运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> ...
  • 一、二进制运算1. 按位与(&)位运算实质是将参与运算的数字转换为二进制,而后逐位对应进行运算。按位与运算为:两位全为1,结果为1,即1&1=1,1&0=0,0&1=0,0&0=0。例如51 & 5 -> ...
  • java二进制运算器(加、见、乘、除)**********
  • public static void main(String[] args) { System.out.println(2.0-1.1);...但是在二进制中,计算十分之一(1/10)就会出现无限循环的数.同理在十进制中,对三分之一进行运算会出现无限循环的数字.(...
  • 1、二进制 原码 存在问题 反码 存在问题 补码 2、数据类型转换 输出cc的值,为30; (如果范围大的转范围小的类型,那么会丢失精度,只截取相应位数,具体转化需要将类型用0和1的二进制表示,然后...
  • 最近在socket传输时,包头涉及到了二进制运算,特地做了一下整理。 原码: 原码是指 把最高位做为符号位(0:表示正数,1:表示负数),其它位数则没有正负之分。 eg: 4:0000 0100 -4:1000 0100 反码: ...
  • package test9;public class streamtest {public static void main(string[] args) {int a = 15;// 0b1111int b = 8;// 0b1000boolean bool1 = true;boolean bool2 = true;system.out.println(a ^ b);...
  • 虽然现在很少用到二进制,可是一些源码中会经常遇到,比如: //HashMap中的hash方法: static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h &gt;&gt;&...
  • 二进制运算原理,大家都知道,不外乎,除2取余和乘2取整。这种费时、费力的方法,这里就不说了。考试讲究的时间,所以要找些简便的方法,必要时还是要记一下“二进制的变化形”,做到一看二进制数就知道其的十进制是...
  • 同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客的目的就是整理出java技术中常用的二进制运算,一方面方便自己查阅和积累,另一方面也想分享给那些刚好看到这篇博文的同学,希望能帮助到你...
  • Java 二进制,八进制,十进制,十六进制转换运算Java进制转换方法十进制转成十六进制:Integer.toHexString(inti)十进制转成八进制Integer.toOctalString(inti)十进制转成二进制Integer.toBinaryString(inti)十六...
  • ,|这种大量的位运算,因此想要读明白这部分代码,对于计算机的二进制操作以及位运算是必须要了解的,那么本篇我们就开始详细的学习二进制操作以及位运算整数的二进制运算要理解整数的二进制,我们先来看看最熟悉的...
  • 先看打印结果在看代码比较好理解。结果在最下面的位置。总结:讲解了二进制的按位异域、按位与、左移的运算规则。并通过次3种算法得到2个数...//初始化要执行加法的值System.out.println("===开始二进制运算===");a...
  • 执行时候的console中打印输出的是0.8999999999999999而不是正常计算出2.0-1.1=0.9这个答案,原因:对此我找了一些解答,主要是二进制机器在处理十分之一(0.1)上出现的问题。主要问题出在小数的二进制表示上:(1) 十...
  • 本文知识点java中用二进制使用场景java中声明二进制数据java中拼接二进制数据二进制的使用场景做标识用二进制就是只有0和1这两个数.这和我们现实很多场景都类似, 如男/女,是/否,是否已读等.那么对一个主体的描述, ...
  • 二进制整数的Java实现任意两个二进制数(不论在什么位置)相加,只可能出现4种情况。它们是:0+0=01+0=0+1=11+1=10=0+向高一位的进位11+1+1=11=1+向高一位的进位1//整数二进制相加public static String add(String b1,...
  • 进制转换:Java中各进制表示方式:二进制以0b开头表示;八进制以0开头表示;十六进制以0x开头表示.进制转化的可以通过十进制转十进制自身转换进行理解:Ps:12345=1X (10)^4+2X (10)^3+3X (10)^2+4X (10)^1+5X (10)^0任意...

空空如也

空空如也

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

java二进制运算

java 订阅