Drugi argument w parseInt()

0

Jak wiadomo drugi argument w funkcji parseInt to "radix" czyli podstawa w matematycznych systemach liczbowych) Powiedzcie mi tylko czy dobrze to rozumiem:

Poniższy przykład oznacza to, że parsujemy stringa w systemie jedynkowym ?

parseInt('2', 1) 

a np. ten poniższy zapis oznacza, że parsujemy stringa w systemie jedynastkowym ?

parseInt('2', 11) 
1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

Drugi argument przyjmuje wartość od 2 do 36, więc

sajek587 napisał(a):
parseInt(‘2’, 1) 

to jest teoretycznie niepoprawne i funkcja zwróci wartość null NaN.

0
Xarviel napisał(a):

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

Drugi argument przyjmuje wartość od 2 do 36, więc

sajek587 napisał(a):
parseInt(‘2’, 1) 

to jest teoretycznie niepoprawne i funkcja zwróci wartość null NaN.

Wiem, ze zwróci NaN. Tylko ja pytałem o co innego :P. Czy jeśli w drugim argumencie mamy np 1 to oznacza system jedynkowy ?

1
sajek587 napisał(a):

Jak wiadomo drugi argument w funkcji parseInt to "radix" czyli podstawa w matematycznych systemach liczbowych) Powiedzcie mi tylko czy dobrze to rozumiem:

Poniższy przykład oznacza to, że parsujemy stringa w systemie jedynkowym ?

parseInt('2', 1) 

a np. ten poniższy zapis oznacza, że parsujemy stringa w systemie jedynastkowym ?

parseInt('2', 11) 

Noo, teoretycznie żeby przedstawić coś w systemie jedynkowym, to musiałbyś napisać tyle cyfr ile wynosi liczba, np 4 w systemie jedynkowym to musiałyby być 4 takie same znaki (trochę jak w rzymskim, że 3 - III) - tylko to znowu ma taką konsekwencję, że to już nie jest system pozycyjny i nie mógłbyś mieć zer wiodących - i z tego powodu wiele parserów nie dopuszcza parsowania do systemu jedynkowego, jeśli taki istnieje w ogóle.

Większość parserów dopuszcza parsowanie od systemu dwójkowego (czyli dwie cyfry, 0 i 1) do 36-kowego, czyli wszystkie cyfry 0-9 oraz litery a-z. Można by zrobić system jeszcze do 62-kowy, i wtedy np a i A to byłyby inne cyfry, no ale fajniej jest zrobić że mamy system liczbowy które jest case-insensitive, więc kończy się na 32-kowym i to w zasadzie wystarcza.

Także @sajek587 pytanie się sprowadza do tego czy mówisz w ogóle o idei reprezentacji liczb jako w tekst w różnych systemach liczbowych, czy pytasz konkretnie o to jak parseInt() w JavaScript działa?

  • Jeśli pytasz o samą ideę; to teoretycznie mógłbyś wymyślić liczbę w bazie 1, tylko ona traci pewne właściwości i staje się przez to mniej użyteczna
  • Jeśli pytasz o to jak zaimplementowane jest parseInt(), to jeśli podasz bazę nie w przedziale 2-36, to dostaniesz jakiś NaN czy inny null.
1
sajek587 napisał(a):
Xarviel napisał(a):

Wiem, ze zwróci NaN. Tylko ja pytałem o co innego :P. Czy jeśli w drugim argumencie mamy np 1 to oznacza system jedynkowy ?

Dokumentacja język trudna jezyk

If the radix value (coerced if necessary) is not in range [2, 36] (inclusive) parseInt returns NaN.

A na gruncie matematyki jak sobie wyobrażasz system jedynkowy ?

(tak w ogóle, to nie mam z JS nic wspólnego, zajęło ni 30s)

0

"If the radix value (coerced if necessary) is not in range [2, 36] (inclusive) parseInt returns NaN."

Ale w tym przykładzie np.

console.log(parseInt('3', 3))

obie liczby należą do zakresu [2,36] i nadal dostaje null.

Jak to możliwe ?

1
sajek587 napisał(a):

"If the radix value (coerced if necessary) is not in range [2, 36] (inclusive) parseInt returns NaN."

Ale w tym przykładzie np.

console.log(parseInt('3', 3))

obie liczby należą do zakresu [2,36] i nadal dostaje null.

Jak to możliwe ?

Człowieku
Wg ciebie trójka ma sen w systemie trójkowym ?

1

zobacz system liczbowe
https://pl.wikipedia.org/wiki/System_liczbowy

sajek587 napisał(a):

"If the radix value (coerced if necessary) is not in range [2, 36] (inclusive) parseInt returns NaN."

radix to podstawa (systemu liczbowego), czyli chodzi o tę drugą liczbę.

Zresztą zobacz. To są cyfry układy dziesiątkowego (którego wszyscy używamy)
0 1 2 3 4 5 6 7 8 9
Tak jak w systemie trójkowym nie ma cyfry "trzy", tak jak w dziesiątkowym nie ma cyfry "dziesięć", dlatego że nie ma takiej potrzeby, bo jak czegoś jest dziesięć to wchodzi w kolejną potęgę dziesiątki, więc dziesięć to nie A tylko 10.

to jest przykładowa liczba
2137

co ona oznacza tak naprawdę?

otóż kolejne cyfry "mają tyle zer" ile wynika z ich pozycji:
2000 + 100 + 30 + 7
7 jest na pozycji zerowej, więc nie ma zer
3 jest na pozycji pierwszej, więc ma jedno zero
1 jest na pozycji drugiej, więc ma dwa zera
2 jest na pozycji trzeciej, więc ma trzy zera

tyle, że "manie zer" to takie dość potoczne określenie. W rzeczywistości chodzi o potęgi dziesiątki:
1000 to 10 do potęgi 3
100 to 10 do potęgi 2
10 to 10 do potęgi 1
1 to 10 do potęgi 0
itp.

2137
to inaczej

2 * 103 + 1 * 102 + 3 * 101 + 7 * 10 0

I analogicznie się robi w innych systemach liczbowych (tylko do systemów, gdzie podstawa jest większa od 10, dodano litery jako dodatkowe brakujące cyfry)

dlatego system jedynkowy nie miałby sensu praktycznego, bo 1 do potęgi którejkolwiek to dalej 1. No chyba że tak jak @Riddle napisał Noo, teoretycznie żeby przedstawić coś w systemie jedynkowym, to musiałbyś napisać tyle cyfr ile wynosi liczba, np 4 w systemie jedynkowym to musiałyby być 4 takie same znaki, ale z dokumentacji JS widać, że postanowiono nie iść tą ścieżką.

1 użytkowników online, w tym zalogowanych: 0, gości: 1