Javascript integers, 32bit ή 64bit;

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Javascript integers, 32bit ή 64bit;

Δημοσίευση από cpulse » 23 Ιαν 2012 22:53

Νόμιζα οτι τα integers στη JavaScript είναι 64μπιτα. Αλλά με ένα προγραμματάκι που παιδεύομαι τον τελευταίο καιρό ανακάλυψα οτι κάτι περίεργο συμβαίνει μετά τα 32 bit.

Το όριο του signed 32bit είναι το 2147483647.

Αν ορίσει κανείς κάτι μεγαλύτερο απ' αυτό λειτουργεί. Αλλά αν κάνει πιο μπερδεμένα παιχνίδια δεν λειτουργεί.

Ο παρακάτω κώδικας μετατρέπει έναν integer σε byte array και το γυρνάει πίσω. Στην επιστροφή χαλάει.

Κώδικας: Επιλογή όλων

var v = 2147483648; // ena megalitero apo to max signed 32bit

var items = [];
for &#40;var i = 0; i < 8; i++&#41; &#123;
	items.push&#40;v & 0xff&#41;;
	if &#40;v > 0&#41; &#123;
		v >>= 8;
	&#125;
&#125;

v = 0;
for &#40;var i = 0; i < 8; i++&#41; &#123;
	if &#40;i > 0&#41; &#123;
		v <<= 8;
	&#125;
	v |= items.pop&#40;&#41;;
&#125;

alert&#40;v&#41;;

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

Javascript integers, 32bit ή 64bit;

Δημοσίευση από nbc » 24 Ιαν 2012 00:55

Καλά νόμιζες... Για την ακρίβεια είναι 52+sign, όση δηλαδή η mantissa ενός 64-bit κατά IEEE 754 αριθμού κινητής υποδιαστολής.

Απλά, κάποιοι operators (όπως καλή ώρα οι bitwise και shift), λειτουργούν σε αντίγραφο των 32bit. Έπεσες στην περίπτωση, δηλαδή.

Περισσότερα:
http://ecma262-5.com/ELS5_HTML.htm#Section_8.5

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Javascript integers, 32bit ή 64bit;

Δημοσίευση από cpulse » 24 Ιαν 2012 01:53

Να παίξω λότο δηλαδή! Ευχαριστώ nbc. Πολύ χρήσιμο το link.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες