Java中的二进制基础

二进制与进制转换

从我们上学起所接触到的正常的数学运算被称之为十进制,逢十进一。而我们的计算机的底层都是以二进制进行运算的。顾名思义,二进制则满足‘逢二进一’规则,它的基数是为2,以0和1为基石来表示数。由18世纪德国数理哲学大师莱布尼兹发现。

二进制表示

定义两个数子6,-6利用java自带的算法进行表示
输出结果:Java的二进制6:00000000 00000000 00000000 0110 
               Java的二进制-6:11111111 11111111 11111111 1010

具体的计算方式:
一般的int型以32位二进制表示 以0开头的表示为正 ,以1开头表示为负
上面的数子6,二进制的形式:0110
如:从右至左 第1位:0*2^0=0;
                     第2位:1*2^1=2;
                     第3位:1*2^2=4;
                     第4位:0*2^3=0;
结果相加:0+2+4+0=6;
这里介绍一个总要的算式:-n=~n+1,  负n=n的补码+1.这叫做互补对称原则。
由此可以得出-6的二进制表现形式。

二进制计算

~ 取反运算
& 与运算
| 或运算
>>> 逻辑右移位运算
>>  数学右移位运算
<<  左移位运算

&   --与运算(逻辑乘法)

规则:

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

|   -- 或运算 (逻辑加法)

规则:

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

>>>  --逻辑右移位运算

每个位向右移位, 高位补0

例子:
n       = 00101011 10110111 10100101 11011010
m=n>>>1 = 000101011 10110111 10100101 1101101
k=n>>>2 = 0000101011 10110111 10100101 110110

<<-- 左移位运算

每个位向左移位, 低位补0

例子:

n       = 00101011 10110111 10100101 11011010
m=n<<1  = 0101011 10110111 10100101 110110100 
k=n<< 2 = 101011 10110111 10100101 1101101000  


案例:

public class Demo08 {
    public static void main(String[] args) {
        /*
         * 左移位的数学意义
         */
        int n = 50;
        int m = n<<1;
        int k = n<<2;
        System.out.println(m);
        System.out.println(k);
        Demo07.print(n);
        Demo07.print(m);
        Demo07.print(k);
        /*
         * 右移位的数学意义
         */
        n = 50;
        m = n>>1; //>>>
        k = n>>2; //>>>
        System.out.println(m);//25
        System.out.println(k);//12
        Demo07.print(n);
        Demo07.print(m);
        Demo07.print(k);
        /*
         * >>> >> 在正数情况下一样
         * >>> >> 在负数情况下不同
         *  >> 负时候, 高位补1
         *  >>> 负时候, 高位补0
         * 
         * n =   11111111 11111111 11111111 11001110 -50
         * n>>1  111111111 11111111 11111111 1100111 -25
         * n>>2  1111111111 11111111 11111111 110011 -13
         * n>>>1 011111111 11111111 11111111 1100111
         * 
         * 将 >> 称为数学移位计算(向小方向取整)
         * 将 >>> 称为逻辑移位计算
         * 
         */

        n = -50;
        n = n>>1;
        k = n>>>1;
        System.out.println(n);
        System.out.println(k);

    }
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值