十进制转换为二进制(java)

方法一: 主要通过辗转相除法实现,既 不断除二求余数的过程,但是需要注意正负数。

public class Number2Binary {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (true){
            System.out.print("input a number:");
            int number = input.nextInt();
            int number2;
            // 如果是负数,需要加上2^31次方
            if (number < 0) {
                number2 = (int)(Math.pow(2,31) + number);
            }else{
                number2 = number;
            }
            String binary = "";
            // 通过辗转相除法,求出二进制数,保存在binary中
            int shang  = number2;
            int yu ;
            int count = 0;
            while(shang != 0) {
                yu = shang % 2;
                shang /= 2;
                count++;
                if (count % 4 == 0) {
                    binary = "_" + yu + binary;
                } else {
                    binary = yu + binary;
                }
            }
            // 不够32位,需要补齐
            while(count < 31){
                count++;
                if(count % 4 == 0 ){
                    binary = "_" + 0 + binary;
                }else {
                    binary = 0 + binary;
                }
            }
            //判断符号位
            if(number < 0 ){
                binary = 1 + binary;
            }else {
                binary = 0 + binary;
            }
            System.out.println(binary);
        }
    }
}

测试案例
输出案例

方法二:通过位移的方式

从最高位的数移至最低位(移31位),除过最低位其余位置清零。
使用1与移位后的数字相&,是为了拿到最低位的数字。
使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 。

public static void binaryToTwo(int n) {
        for (int i = 31; i >= 0; i--)
            System.out.print(n >>> i & 1);
    }
 -2的二进制 :1111_1111_1111_1111_1111_1111_1111_1110
 -2 >>> 31  : 1111_1111_1111_1111_1111_1111_1111_1110  
  -2 >>> 31 & 1 = 1
  -2 >>> 30 & 1 = 1
  -2 >>> 0  &  1 = 0

说明:在计算机中负数是按照补码输出,既 负数的补码 = 源码取反(符号位不变) + 1;

位运算的知识点补充: 知识点补充

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值