Java教程

Java二进制位运算符

本文主要是介绍Java二进制位运算符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

二进制原码、反码、补码

原码

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

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

使用StringBuilder的insert方法:
在这里插入图片描述
注:可将字符串插入到字符序列中,索引位置为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


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

位运算

位运算分类

在这里插入图片描述

左移(<<):不分正负数,低位补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二进制位运算符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!