Java二进制位运算符

二进制原码、反码、补码

原码

原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分),正数符号位为0,负数符号位为1。

获取原码方法: 注:int 类型32位

使用StringBuilder的insert方法:
Java二进制位运算符
注:可将字符串插入到字符序列中,索引位置为offset (从0起) 的位置开始

final static char[] digits = {'0' , '1'};
    /**获取原码方法,int类型32位
     */
    private static String toUnsignedString(int value) {
        StringBuilder sb = new StringBuilder();
        int i = 32;
        int j = value;
        do {
            if (j >= 0) 
                sb.insert(0,digits[j % 2]);
            else
                sb.insert(0,digits[-(j % 2)]);//因为小于0,所以得出的数值为负数,加上负号转为正数
            j /= 2;
            i--;
        } while (i > 0);
        //格式处理一下
        if(value < 0)
            sb.setCharAt(0, '1');
        for (i = 0; i < sb.length(); i++) {
            if((i + 1) % 5 == 0)
                sb.insert(i, " ");     //4位一组
        }
        return sb.toString();
    }

注:insert一个,往后推
setCharAt(int i, char c):将索引为i 的代码单元设置为 c(可以理解为替换)

反码

正数的反码 == 原码,负数的反码是在其原码的基础上,符号位(首位)不变,其余各个位取反。

补码

正数的补码 == 原码,负数的补码是在其反码的基础上加1。

总结:

正数:原码 = 反码 = 补码

负数:反码 = 原码符号位不变,其余各位取反 补码 == 反码加1


注:二进制都是由高位到低位

位运算

位运算分类

Java二进制位运算符

左移(<<):不分正负数,低位补0
右移(>>):正数高位补0,负数高位补1
无符号右移(>>>):不分正负数,高位补0

转换二进制的方法:

1> jdk自带方法 Integer.toBinaryString()

private static String binaryToDecimal(int num) {
        StringBuilder sb = new StringBuilder();
        sb.append(Integer.toBinaryString(num));//是有jdk自带方法转为二进制
        for (int i = 0; i < 16 - sb.length; i++) {//补齐16位
            sb.insert(0, 0);
        }
        for (int i = 0; i < sb.length; i++) {
            if((i + 1) % 5 == 0)
                sb.insert(i, " ");    //四位一组
        }
        return sb.toString();
    }

2> 求余,逐个插入

final static char[] digits = {'0' , '1'};
    /**获取原码方法,int类型32位
     */
    private static String toUnsignedString(int value) {
        StringBuilder sb = new StringBuilder();
        int i = 32;
        int j = value;
        do {
            if (j >= 0) 
                sb.insert(0,digits[j % 2]);
            else
                sb.insert(0,digits[-(j % 2)]);//因为小于0,所以得出的数值为负数,加上负号转为正数
            j /= 2;
            i--;
        } while (i > 0);
        //格式处理一下
        if(value < 0)
            sb.setCharAt(0, '1');
        for (i = 0; i < sb.length(); i++) {
            if((i + 1) % 5 == 0)
                sb.insert(i, " ");     //4位一组
        }
        return sb.toString();
    }
上一篇:java,判断手机设备跟adb建立连接


下一篇:生活感悟+String、StringBuffer、StringBuilder区别