View Full Version : [Java] Definizione tipi dati
acquax80
02-09-2005, 18:52
Salve,
sono nuovo dell'ambiente di programmazione Java e avrei già un grosso problema al quale non riesco a trovar soluzione.
In pratica avrei necessità di definire un tipo di dato numerico che utilizzi assolutamente 3 Byte per la rappresentazione, così da poter permettere l'inserimento di numeri che vanno da 0 a 16.777.215.
Non posso utilizzare un tipo di dato quale l' INT perchè, si risolverebbe il mio problema di range numerico, ma comporterebbe l'uso di 4 Byte. Correggetemi se erro.
Ora ricordo bene che in altri linguaggi tale definizione era possibile.
Credo sia fattibile anche in java dunque ma non ho la minima idea del come.
Attendendo risposta, ringrazio
Potresti definire una classe apposita che in realtà "maschera" un array di byte di dimensione, appunto, tre, e poi ridefinirti le operazioni che ti occorrono su quel tipo speciale di dati. Oppure rifarlo proprio a partire dal tipo int, avendo cura di verificare i limiti del tuo nuovo "sottotipo" quando fai operazioni su int.
So che è un'idea banale, ma è la prima che mi è venuta in mente... forse qualcun altro ti saprà consigliare soluzioni più rapide.
acquax80
03-09-2005, 11:17
Potresti definire una classe apposita che in realtà "maschera" un array di byte di dimensione, appunto, tre, e poi ridefinirti le operazioni che ti occorrono su quel tipo speciale di dati. Oppure rifarlo proprio a partire dal tipo int, avendo cura di verificare i limiti del tuo nuovo "sottotipo" quando fai operazioni su int.
So che è un'idea banale, ma è la prima che mi è venuta in mente... forse qualcun altro ti saprà consigliare soluzioni più rapide.
Ma basandomi sul tipo int per definire una nuova classe, pur specificando i limiti, non andrei comunque ad utilizzare 4 byte una volta chiamata la nuova classe?
acquax80
04-09-2005, 03:40
Aiuto :cry:
franksisca
04-09-2005, 08:38
Ma basandomi sul tipo int per definire una nuova classe, pur specificando i limiti, non andrei comunque ad utilizzare 4 byte una volta chiamata la nuova classe?
si, perchè, se ho capito bene cosa volesse dire Mixmar, tu dovresti fare i controlli solo sul valore, in modo da limitarlo a 3 byte.
credo che l'unica soluzione al tu problema sia creare una classe che abbia un vettore di 24 boolean all'interno, e ogni volta che construisci un numero di questa classe, lo converti in binario.
In quanto a dimensione, se non ricordo male il boolean è un dit (true or false), quindi utilizzi 24 bit, ovvero tre byte.
Di meglio non sò se si può fare, se ci riesci facci sapere.
Non sarei così sicuro che un booleano sia implementato usando un bit, piuttosto un int...
La cosa migliore sarebbe usare un int e "limitarlo", se il requisito dei 3 byte non e' irrinunciabile.
franksisca
04-09-2005, 14:52
guarda che mi sembra che il boolean sia solo un bit, infatti è true or false, ovvero 1 o 0, quindi, ripeto, credo che sia un solo bit, a meno di smentite.
cdimauro
04-09-2005, 18:31
Se devi usare soltanto 3 byte, creati un vettore di 3 byte o una struttura di soli 3 byte e scrivi delle procedure e funzioni per manipolarli.
DioBrando
04-09-2005, 19:06
Non sarei così sicuro che un booleano sia implementato usando un bit, piuttosto un int...
La cosa migliore sarebbe usare un int e "limitarlo", se il requisito dei 3 byte non e' irrinunciabile.
un bit un bolean, 32 bit un int ;)
franksisca
04-09-2005, 19:57
un bit un bolean, 32 bit un int ;)
quindi può fare come dico io, ovvero un vettore di 24 boolean e convertire in binario
Dalle specifiche della jvm:
In Sun's JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element.
Il fatto che un boolean sia logicamente equivalente a un bit non vuole affatto dire che sia implementato usando un bit, questo fatto dipende dalla jvm (penso che usando il gcj un boolean sarà probabilmente implementato come un int).
Quindi usando un array di 24 boolean l'occupazione nella jvm di Sun è (a meno di cambiamenti) di 24 byte.
Se il requisito dei 3 byte è irrinunciabile si potrebbero usare 3 int (12 byte=mcm(3,4)) per contenere 4 numeri, mascherare i bit, ecc... con il conseguente lavoraccio per implementare il tutto e il decadimento di prestazioni.
Oppure dai un occhio a BitSet, la cui documentazione però dice:
Note that the size is related to the implementation of a bit set, so it may change with implementation. The length of a bit set relates to logical length of a bit set and is defined independently of implementation.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.