Wiem, że 0x
jest to prefiks dla liczb szesnastkowych w JavaScript. Na przykład 0xFF
oznacza liczbę 255.
Czy jest coś podobnego do liczb binarnych? Spodziewałbym się, że będę 0b1111
reprezentował liczbę 15
, ale to nie działa dla mnie.
javascript
Misha Moroshko
źródło
źródło
0b0111_0_1_0_1
.Odpowiedzi:
Aktualizacja:
Nowsze wersje JavaScript - w szczególności ECMAScript 6 - dodały obsługę literałów liczbowych binarnych (prefiks
0b
), ósemkowych (prefiks0o
) i szesnastkowych (prefiks0x
:):Ta funkcja jest już dostępna w przeglądarkach Firefox i Chrome. Obecnie nie jest obsługiwany w IE, ale najwyraźniej będzie, gdy pojawi się Spartan.
(Dzięki średnik komentarzu „s i odpowiedzi urish koszulka dla wskazujące na to.)
Oryginalna odpowiedź:
Nie, nie ma odpowiednika dla liczb binarnych. JavaScript obsługuje tylko literały numeryczne w formacie dziesiętnym (bez przedrostka), szesnastkowym (przedrostek
0x
) i ósemkowym (przedrostek0
).Jedną z możliwych alternatyw jest przekazanie ciągu binarnego do
parseInt
metody wraz z podstawą:źródło
0b
wsparcie.int type
aniinteger type
, więc wszystkie liczby całkowite są przechowywane jako liczby zmiennoprzecinkowe .W ECMASCript 6 będzie to obsługiwane jako część języka, tj.
0b1111 === 15
Jest prawdziwe. Możesz także użyć dużej litery B (np0B1111
.).Szukaj
NumericLiterals
w specyfikacji ES6 .źródło
Wiem, że ludzie mówią, że rozbudowa prototypów to nie jest dobry pomysł, ale taki był twój scenariusz ...
Robię to w ten sposób:
źródło
ParseInt("101", 2)
może to być właściwa odpowiedź!Jeśli Twoim głównym problemem jest wyświetlanie, a nie kodowanie, istnieje wbudowany system konwersji, którego możesz użyć:
Ref: Numer JavaScript
źródło
O ile wiem, w Javascript nie można używać binarnego denotera. Mam dla ciebie trzy rozwiązania, z których wszystkie mają swoje problemy. Myślę, że alternatywa 3 jest najbardziej „ładna” pod względem czytelności i prawdopodobnie jest znacznie szybsza niż reszta - z wyjątkiem początkowego kosztu czasu wykonania. Problem w tym, że obsługuje tylko wartości do 255.
Alternatywa 1:
"00001111".b()
Alternatywa 2:
b("00001111")
Alternatywa 3:
b00001111
Ta wersja umożliwia wpisanie 8 cyfr binarnych
b00000000
, 4 cyfrowychb0000
i zmiennychb0
. To jestb01
nielegalne, musisz użyćb0001
lubb1
.źródło
Może to się przyda:
źródło
bin
ma przypisaną liczbę, która wygląda na binarną, ale w rzeczywistości jest analizowana jako podstawa 10.parseInt
Funkcja oczekuje łańcucha jako pierwszego argumentu, więc zamienia go na "1111" (reprezentacja o podstawie 10), a następnie przetwarza go ponownie tak, jakby była to baza 2.Nie, ale możesz użyć parseInt i opcjonalnie pominąć cudzysłowy.
Jedyną wadą pomijania cudzysłowów jest to, że w przypadku bardzo dużych liczb przepełnisz szybciej:
źródło
Konwertuj ciągi binarne na liczby i odwrotnie.
źródło
Wiem, że to właściwie nie odpowiada na zadane pytanie (na które udzielono już odpowiedzi kilka razy), ale sugeruję, abyś (lub inni zainteresowani tym tematem) wzięli pod uwagę fakt, że najbardziej czytelny i kompatybilny z poprzednimi / przyszłymi / różnymi przeglądarkami sposobem byłoby po prostu użycie reprezentacji szesnastkowej.
Z wyrażenia Q wydaje się, że mówisz tylko o używaniu literałów binarnych w swoim kodzie, a nie o przetwarzaniu binarnych reprezentacji wartości liczbowych (dla których parstInt jest właściwą drogą).
Wątpię, czy jest wielu programistów, którzy muszą obsługiwać liczby binarne, którzy nie są zaznajomieni z mapowaniem 0-F na 0000-1111. więc zasadniczo utwórz grupy po cztery i użyj notacji szesnastkowej.
więc zamiast pisać 101000000010 użyłbyś 0xA02, który ma dokładnie to samo znaczenie i jest znacznie bardziej czytelny i rzadziej zawiera błędy.
Weź pod uwagę czytelność. Spróbuj porównać, który z nich jest większy: 10001000000010010 lub 1001000000010010
a co jeśli napiszę je tak:
0x11012 lub 0x9012
źródło
źródło