java位运算的理解

java 位运算的理解

代码块

本文部分转载自http://www.cnblogs.com/song-wentao/的博文

package util;

public class bitOperation {
    public static void main(String[] args) {
        /**
         * java 进制 理解
         */

        int i = 235;
        System.out.println("============");
        System.out.println("十进制转二进制 " + Integer.toBinaryString(i));
        System.out.println("十进制转八进制 " + Integer.toOctalString(i));
        System.out.println("十进制转十六进制 " + Integer.toHexString(i));
        System.out.println("============");
        System.out.println("二进制转十进制 " + Integer.valueOf("11101011", 2));
        System.out.println("八进制转十进制 " + Integer.valueOf("353", 8));
        System.out.println("十六进制转十进制 " + Integer.valueOf("EB", 16));
        System.out.println("十六进制转二进制 " + Integer.toBinaryString(Integer.valueOf("eb", 16)));

        /**
         * java 高位低位 理解
         */
        int j = 0xeb ; 
        int low = j & 0xFF ; //11111111
        int high = j >>> 8 ;
        System.out.println("============" + Integer.toBinaryString(0xFF));
        System.out.println("j : " + j );
        System.out.println("j二进制 : " + Integer.toBinaryString(j) );
        System.out.println("低位 low :" + low);
        System.out.println("低位 low 二进制 :" + Integer.toBinaryString(low) );
        System.out.println("高位 high :" + high);
        System.out. println("高位 high二进制 :" + Integer.toBinaryString(high) );

        /**
         * java 位运算 
         */
        // 左移 
        System.out.println("============");
        System.out.println(Integer.toBinaryString(5));
        System.out.println("5<<2 :"+Integer.toBinaryString(5<<2));
        System.out.println(Integer.valueOf(Integer.toBinaryString(5<<2),2));
        //右移
        System.out.println("20>>2 : "+Integer.toBinaryString(20>>2));
        System.out.println(Integer.valueOf(Integer.toBinaryString(20>>2),2));

        //无符号右移  在高位补0而不是按符号补
        //负数规则: 正数取反+1 如  101 事实上是 00000000000000000000000000000101 取反 11111111111111111111111111111010 再+1
        System.out.println("=============无符号右移");
        System.out.println(Integer.toBinaryString(-5)); 
        //00000000000000000000000000000101 =>
        //00000000000000000000000000000001
        System.out.println(Integer.toBinaryString(5>>>2)); // 5>>>2 = 5>>2
        //11111111111111111111111111111011 =>
        //11111111111111111111111111111110
        System.out.println(Integer.toBinaryString(-5>>2));
        //11111111111111111111111111111011 =>
        //00111111111111111111111111111110
        System.out.println(Integer.toBinaryString(1073741822)); 
        System.out.println(Integer.valueOf("00111111111111111111111111111110", 2)); 
        System.out.println(Integer.toBinaryString(-5>>>2)); 
        //左移,正负数不影响
        /* 因为左移是在后面补0
            而右移是在最前面边补1或0
            有无符号是取决于数的前面的第一位是0还是1 
            所以右移是会产生到底补1还是0的问题。
            而左移始终是在右边补,不会产生符号问题。
            所以没有必要无符号左移<<<。
            无符号左移<<<和左移<<是一样的概念
         */
        //位运算 与,或,非,异或
        System.out.println(5 & 3);// 结果为1
        System.out.println(5 | 3);// 结果为7
        System.out.println(5 ^ 3);// 结果为6 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
        System.out.println(~ 5);// 结果为-6
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值