2016-08-05 9 views
1

Wie schreibe ich ein Programm, das Bits der ganzen Zahl ausdrucken. Ich versuche, so etwas zu tun:Wie schreibe ich ein Programm, das ganzzahlige Bits in JS

function countBits(octet) 
    { 
     var  i; 
     var  c = ""; 
     var k = ""; 
     i = 128; 

     while (i > 0) 
     { 
      c = ""; 
      if (octet < i) 
      { 
       c = '0'; 
       i = i/2; 
       k += c 
      } 
      else 
      { 
       c = '1'; 
       k += c 
       octet = octet - i; 
       i = i/2; 
      } 
     } 
     return k; 
} 

Aber wenn ich versuche Bits mit diesem Programm drucken Ich habe Ausgabe:

Input: 123 
Output 01111011 and infinity numbers of zero 

Wie kann ich diesen Fehler entfernen?

P. S: Ich möchte mit diesem Programm nur Loops und Algorithmen tun, wie (n >>> 0).toString(2); oder .map() oder etwas funktioniert nicht so

+0

bin ich nicht sicher, warum 'c' benötigt wird. Kannst du nicht einfach '+ =' das String-Literal? – 4castle

+0

Ja, aber ist bequemer für mich :) –

+0

Wirklich? Dein Code ist im Moment ziemlich kryptisch. Anders als "Oktett" macht keine der Variablen Sinn. – 4castle

Antwort

0

Also habe ich ein wenig Logging für die Überprüfung der Werte von i hinzugefügt und ich habe dies in der Schleife: i = 64; i = 32; i = 16; ... i = 1; i = 0,5; i = 0,25

Also ja, tun, was AgataB sagte in Bezug auf die Verwendung eines anderen Zustand statt, da für Javascript, 02.01 ist nicht 0.

Im Gegensatz zu vielen anderen Programmiersprachen geben, tut JavaScript nicht definieren verschiedene Arten von Zahlen, wie ganzen Zahlen sind, kurz, lang, Gleitkommazahlen usw.

JavaScript Zahlen werden immer gespeichert als doppelte Genauigkeit Punktzahl nach dem internationalen Standard IEEE 754 Floating.

Zitat von: http://www.w3schools.com/js/js_numbers.asp

+0

Aber jetzt, wenn ich Zahlen größer als 250, habe ich immer ausgegeben: '11111111' –

+0

Nun, weil Ihr ich 128 ist. Also egal, was, das Maximum wird immer bei 255 sein, dh 11111111 seit damals, 128 wird 0,5 erreichen. Und deshalb nennt man dieses Oktett ein Byte mit höchstens 8 Bits. – Luna

4

Ihre variable i ist immer größer als 0, so dass die while-Schleife für immer läuft weiter. Wenn Sie es dekrementieren, halbieren Sie es. Das wird nie zu 0, aber es wird auf einen Wert kleiner als eins kommen, und an diesem Punkt wollen Sie aufhören.

Versuchen Sie stattdessen while (i >= 1) als Ihre Bedingung.

+0

Es hat funktioniert, ty :) –

Verwandte Themen