Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   из 10 в 2 систему исчисления (http://www.flasher.ru/forum/showthread.php?t=50103)

opex 10.10.2003 16:47

из 10 в 2 систему исчисления
 
Надо перевести и 10 системы исчисления в 2

алгоритм таков
возмем число 40(dec)
аналог в двоичной системе такой 101000(bin)
40 / 2 = 20 остаток 0
20/2 = 10 остаток 0
10/2 = 5 остаток 0
5/2= 2 остаток 1
2/2 = 1 остаток 0
конечный остаток 1
40(dec) = 101000(bin)

Код:

x = 40;
binM = new Array();
for (; x>2; ) {
        bin = x %= 2;
        x = Math.floor(x/2);
        binM.push(bin);
}
bin.reverse();
trace(bin);


вроде все вероно а не работает :confused:
зарание блогодарен

Dimonius 10.10.2003 17:00

for (; x>2; ) - это что за конструкция?

llllllllll 10.10.2003 17:02

trace((40).toString(2))

opex 10.10.2003 17:12

к сожелению toString не подходит
а for(;a>2;) это нармальная конструкция ну можеш проверить


Код:

for (; i<10; ) {
        trace((40).toString(2));
        i++;
}


Пушистик 10.10.2003 20:55

Dimonius, эт можно обяснить типа тем, что i не задана и Flash распознает как как false(false=0)...

opex, а чем тя не устраивает toString(2)?:)

opex 11.10.2003 00:54

мне лабу надо сдать
а преподу надо так

sultan_M 11.10.2003 16:56

Всем привет! :)

Я написал следующий код 6 месяцев назад, заметив что AS не представляет никаких встроенных Math.методов, которые переводят 16, 8, 2 в 10 системы исчисления, и 10 системы исчисления в 2 :)

Код:

// =========== Conversions Between Systems =========== \\
//
//                Sultan Majed Al-Otaibi 2003
//
//============*****************************============\\
var o = Math;
o.fromHexToDec = function(x){
        var digs = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'];
        var a = x.toUpperCase().split("");
        a.reverse();
        var i = 0;
        var w, result, b;
        while(i < a.length){
                for(var j=0; j < digs.length;j++){
                        if(a[i] == digs[j]){
                                b = true;
                                w = Math.pow(16, i);
                                result += j * w;
                                break;
                        }else{
                                b = false;
                        }
                }
                if(!b){
                        trace('Wrong Arguments');
                        return b;
                }
                i++;
        }
       
        return result;
}
o.fromOctToDec = function(x){
        var a = String(x).split('');
        a.reverse();
        var i = 0;
        var w, result;
        while(i < a.length){
                        w = Math.pow(8, i);
                        result += a[i] * w;
                        i++;
        }
        return result;
}
o.fromBinToDec = function(x){
        var a = String(x).split('');
        if(a.length > 16){
                trace('Wrong Arguments');
                return false;
        }
        a.reverse();
        var i = 0;
        var w, result;
        while(i < a.length){
                w = Math.pow(2, i);
                result += a[i] * w;
                i++;
        }
        return result;
}
o.fromDecToBin = function(x){
        if(!x){return 0;}
        var result = [];
        while(x){
                var i = int(x/2);
                if(i * 2 == x){
                        result.unshift(0);
                }else{
                        result.unshift(1);
                }
                x = i;
        }
        return result.join('');
}

Теперь попробуйте писать например:
Код:

trace(Math.fromDecToBin(8)); // результат: 1000
Удачи :)

llllllllll 11.10.2003 17:18

Да для лабы, наверно это не подойдет, хотя сама ситуация довольно странная :)

А вот выше написанное вообще непоняно зачем нужно во флеше ...

trace(Math.fromHexToDec("FF"))
trace(parseInt("FF",16))

:)

Techmaker 11.10.2003 19:07

this.num=555;this.dec=this.num;trace("число: "+this.dec+newline+"начнём:");this.bin=new Array()
while(this.dec>0){trace(Math.floor(this.dec)+" / 2 (делим)");if(Math.floor(this.dec)==this.dec){this.bin[this.count++-1]="0"}else{this.bin[this.count++-1]="1";this.dec=Math.floor(this.dec)}this.dec/=2}delete this.count;delete this.dec
this.bin.reverse();for(this.count=0;this.count<this.bin.length;this.count++){this.new_bin+=this.bin[this.count]}delete this.count;delete this.bin;trace("результат: "+this.new_bin);delete this.new_bin;trace("проверка: "+Number(this.num).toString(2));delete this.num

:D прикольнулся

sultan_M 11.10.2003 21:08

2llllllllll

Спасибо за объясние :)
Я не прочитал о функции parseInt .. Ну что ж .. С выщепересчислённым кодом ( метод fromDecToBin ) стало удобно перевести 10 системы исчисления в 2 :)


Часовой пояс GMT +4, время: 19:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.