Java实现~位非运算符负数解析

这篇博客详细介绍了Java中的位非运算符(~)如何应用于负数,特别是通过实例解析了负数如-10经过位非运算后的转换过程,讨论了其在取反数场景中的应用。

~位非运算符笔记记录


一、~位非运算符的写法

1.1 ~常用场景取反数

(~10 + 1)

二、运行规律解析

2.1以负数-10转正为例

2.2 解析规则如下:

 * 		   1、原码:获取转换的二进制数值,为获取绝对值在高位也就是首位(符号位)加1
         * 2、反码:对该数值的二进制除首位(符号位)的个位数进行取反
         * 3、补码:在反码的基础上末尾处加1
         * 4、如补码尾数加1便减一取反码
         * 5、反码进行转换
         * 6、由二进制转换十进制得到整数

2.3Java实现如下

        String base10 = Integer.toBinaryString(-(10+1)); //00001010原码
        String num = "";
        char[] single = new char[]{'1', '0'};
        //反码:11110101  11110101 10001010  32位全
        for (int i = 0; i < base10.length(); i++) {
            char c = base10.charAt(i);
            if (Objects.equals(ZERO,String.valueOf(c))) {
                c = single[0];
                num += c;
                continue;
            }
            c = single[1];
            num += c;
        }
        System.out.println("32位二进制:"+num+1);
        BigInteger bigInteger = new BigInteger(num, 2);
        System.out.println(bigInteger.toString());

总结

int值返回的负数二进制是32位二进制数值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值