数值转换(十进制转换为二进制)

public class Binary { 
    public static void main(String[] args) { 

        // 显示N的二进制表示法
        int n = Integer.parseInt(args[0]);

        // set v to the largest power of two that is <= n
        int v = 1;
        while (v <= n/2) {
            v = v * 2;
        }
  
        // 现在v是<=N的2的最大幂
        while (v > 0) {

            // 以递减顺序抛出2的幂
            if (n < v) {
                System.out.print(0);
            }

            // v is present in n, so remove v from n
            else {
                System.out.print(1);
                n = n - v;
            }

            // next smallest power of 2
            v = v / 2;
        }

        System.out.println();

    }

}

此程序将来自命令行的十进制转换为二进制(基为2)表示。根据为一个数可以分解为2的幂的和。例如:19的二进制表示法是10011,这种表示就是19=16+2+1.为了计算N的二进制表示法,我们以递减顺序考虑小于或等于N的2的幂,来确定哪些属于二进制分解(因为对应与二进制表示法中的1位)。此过程像使用天平来称对象的重量相对应,使用2的幂值为砝码。首先,我们发现最大的幂值比物品轻。然后,以递减顺序考虑幂值,逐一增加砝码来测试,是否是对象轻了。

如果对象轻了,我们去除刚加上的砝码;如果还是砝码轻,我们留下砝码并继续加下一个砝码。每个砝码对应于对象重量在二进制表示法中的位:留下砝码对应在对象重量的二进制表示法中的1,而去除的砝码对应于对象重量二进制表示法中的0.

在Binary中,变量v对应于当前被测试的砝码,变量n说明对象重量的剩余部分(未知部分)(模拟留在天平上留下的重量,我们从n中减去砝码)。

v的值以2的幂减少。当v的值大于n,Binary显示0;否则显示1并减去从n中减去v.

Java程序Binary对19的2的幂的循环跟踪

n

二进制表示法

v

v > 0

二进制表示法

n < v

输出

19

10011

16

true

10000

false

1

3

0011

8

true

1000

true

0

3

011

4

true

100

true

0

3

01

2

true

10

false

1

1

1

1

true

1

false

1

0

0

false

 


参考书籍:Java程序设计一种跨学科的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值