View Full Version : [JAVA] acquisizione Byte
bobby1112
08-10-2009, 09:43
salve ragazzi ho questo problema leggo un tipo di dato bigint da mysql
che ha una precisione di 20 cifre(cioè con bigint riesco a rappresentare 20 cifre),
la mia domanda è dalla precisione posso risalire alla dimensione in byte di bigint.
Grazie a tutti.:stordita:
salve ragazzi ho questo problema leggo un tipo di dato bigint da mysql
che ha una precisione di 20 cifre(cioè con bigint riesco a rappresentare 20 cifre),
la mia domanda è dalla precisione posso risalire alla dimensione in byte di bigint.
Grazie a tutti.:stordita:
Potrebbe essere una cosa del genere?
ceil(log256(numero))
L'ho buttata lì, non ho prestato attenzione a off-by-1 ed eventuali, ma in linea di massima la logica dovrebbe essere questa.
Java nn c'entra.
99.999.999.999.999.999.999 in binario corrisponde a 110101111000111010111100010110101100011000011111111111111111111
(convertito or ora con la calcolatrice di Windows)
che sarebbero 64 bit, cioé 8 byte, e non é neanche il massimo rappresentabile.
ehm, ho sbagliato :stordita:
la calcolatrice di Windows convertendo in binario andava in overflow :D
per rappresentare 20 volte 9 servono 2 o 3 bit in piu.
Java nn c'entra.
99.999.999.999.999.999.999 in binario corrisponde a 110101111000111010111100010110101100011000011111111111111111111
(convertito or ora con la calcolatrice di Windows)
che sarebbero 64 bit, cioé 8 byte, e non é neanche il massimo rappresentabile.
Mi è parso di capire che voglia sapere, dato un numero, il numero minimo dii byte in cui è possibile memorizzarlo.
Se non è così ignora la mia soluzione :sob:
PS: Ah, che forse intenda la dimensione dell'oggetto BigInt? In questo è veramente un bel casino, perchè oltre a studiarti come si memorizza i dati il BigInt, devi anche tenere in considerazione che la JVM aggiunge dell'overhead suo per il GC e chissà che altro.
bobby1112
08-10-2009, 17:06
PS: Ah, che forse intenda la dimensione dell'oggetto BigInt? In questo è veramente un bel casino, perchè oltre a studiarti come si memorizza i dati il BigInt, devi anche tenere in considerazione che la JVM aggiunge dell'overhead suo per il GC e chissà che altro.
si esatto intendo proprio la dimensione del tipo Bigint non del valore memorizzato???
riesco a risalire alla precisione (da rs.getmetedata().getPrecision() dove rs e un ResultSet), ma non alla sua dimensione in byte?
Grazie ciao.
wizard1993
08-10-2009, 18:08
si esatto intendo proprio la dimensione del tipo Bigint non del valore memorizzato???
riesco a risalire alla precisione (da rs.getmetedata().getPrecision() dove rs e un ResultSet), ma non alla sua dimensione in byte?
Grazie ciao.
ma non c'è il metodo che ritorna direttamente un BigInteger?
http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html
^TiGeRShArK^
08-10-2009, 18:50
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.
SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
Some things you should be aware of with respect to BIGINT columns:
All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.
MySQL can handle BIGINT in the following cases:
When using integers to store large unsigned values in a BIGINT column.
In MIN(col_name) or MAX(col_name), where col_name refers to a BIGINT column.
When using operators (+, -, *, and so on) where both operands are integers.
You can always store an exact integer value in a BIGINT column by storing it using a string. In this case, MySQL performs a string-to-number conversion that involves no intermediate double-precision representation.
The -, +, and * operators use BIGINT arithmetic when both operands are integer values. This means that if you multiply two big integers (or results from functions that return integers), you may get unexpected results when the result is larger than 9223372036854775807.
Ancora non ho capito a che ti serve sapere la dimensione di BIGINT che è cmq pari ad 8 byte, come puoi leggere dalla documentazione che ho postato.
bobby1112
08-10-2009, 20:46
bigint è un esempio devo convertire tutti i tipi dei dati dei vari dbms in tipi definiti da me ecco perchè mi serve sapere la dimensione di ogni tipo che leggo per poterlo convertire nel tipo giusto.
banryu79
13-10-2009, 11:08
bigint è un esempio devo convertire tutti i tipi dei dati dei vari dbms in tipi definiti da me ecco perchè mi serve sapere la dimensione di ogni tipo che leggo per poterlo convertire nel tipo giusto.
Ciao bobby1112,
scusa, ma chiedo: stai cercando di risolvere lo stesso problema che avevi esposto in questa discussione (http://www.hwupgrade.it/forum/showthread.php?t=2052229)?
Ho cercato di darti una mano, ma ad un certo punto non mi era chiaro quello che ti serviva... ciao.
P.S.: Comunque se ora stai cercando di eseguire il mapping tra i tipi di dato definiti in Mysql e tipi Java, l'approccio è il medesimo: devi prenderti le specifiche (come ti ha suggerito ^TiGeRShArK^) di Mysql per vedere come li codifica e poi trovare una corrispondenza per i tipi Java, avendo le specifiche dei tipi primitivi Java sotto mano.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.