首页 > 其他 > 详细

十进制数转换到二进制

时间:2015-11-05 12:12:37      阅读:263      评论:0      收藏:0      [点我收藏+]

每一只程序猿都知道:在现实生活中,我们主要是使用十进制数。但是在计算机科学中,二进制则非常重要。计算机内的所有的内容都是用0和1表示的。

那么我们不禁好奇,人类输入的十进制数据是怎样被计算机转换成它能理解的二进制数据的呢?

我们首先会用到stack这个数据结构。因此有必要声明一个stack类。

function Stack() {

    var items = [];

    this.push = function(element){
        items.push(element);
    };

    this.pop = function(){
        return items.pop();
    };

    this.peek = function(){
        return items[items.length-1];
    };

    this.isEmpty = function(){
        return items.length == 0;
    };

    this.size = function(){
        return items.length;
    };

    this.clear = function(){
        items = [];
    };

    this.print = function(){
        console.log(items.toString());
    };

    this.toString = function(){
        return items.toString();
    };
}

以下是利用栈来实现数制之间的转换的示意图和实际的代码。

技术分享

//233 == 11101001
//2x(10x10) + 3x(10) + 3x(1)

function divideBy2(decNumber){

    var remStack = new Stack(),
        rem,
        binaryString = ‘‘;

    while (decNumber > 0){
        rem = Math.floor(decNumber % 2);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / 2);
    }

    while (!remStack.isEmpty()){
        binaryString += remStack.pop().toString();
    }

    return binaryString;
}

console.log(divideBy2(233));
console.log(divideBy2(10));
console.log(divideBy2(1000));

/*
    The folow algorithm converts from base 10 to any base
 */
function baseConverter(decNumber, base){

    var remStack = new Stack(),
        rem,
        baseString = ‘‘,
        digits = ‘0123456789ABCDEF‘;

    while (decNumber > 0){
        rem = Math.floor(decNumber % base);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / base);
    }

    while (!remStack.isEmpty()){
        baseString += digits[remStack.pop()];
    }

    return baseString;
}

console.log(baseConverter(100345, 2));
console.log(baseConverter(100345, 8));
console.log(baseConverter(100345, 16));

程序运行结果如下:

技术分享

注意:The Math.floor() function returns the largest integer less than or equal to a given number.Because floor() is a static method of Math, you always use it as Math.floor(), rather than as a method of a Math object you created (Math is not a constructor).

十进制数转换到二进制

原文:http://my.oschina.net/donngchao/blog/526180

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!