02. november 2004 - 09:19Der er
8 kommentarer og 1 løsning
10 bit varibel i Java
Hej
Hvordan laver jeg en varibal der er 10 bit og kun 10 bit lang i Java?
Jeg er i gang med et kursus hvor vi har fået til opgave at implamentere S-DES (en mindre udgave DES) krypterings adgoritme. Og her til har jeg brug for et varibel der er 10 bit lang.
Det er selvfølgelig rigtig nok, men det var fordi at han gerne ville have en varibal som kun var 10bit. Selvfølgelig skal han så selv igang med at kode lidt for at få det til at fungere.
Det er (som allerede sagt) ikke muligt at lave en atomær 10-bit variabel. Men det er rimeligt nemt at lave en klasse der opfører sig somom den indeholder sådan en variabel:
class TiBit { // unsigned 10-bit verdi
public static final int MAX_VALUE = 1023; public static final int MIM_VALUE = 0; private int verdi = 0;
public TiBit () { this verdi = 0; } // endconstructor public TiBit (int verdi) { this verdi = verdi; } // endconstructor
public int valueOf() { return this.verdi; } // endmethod //etc ... alle standardfunjtionerene som fx toString, equals, compareTo
public void add( TiBit other ) { this.verdi = ( this.verdi + other.valueOf() ) % (MAX_VALUE+1); } // endmethod //etc ... alle de regningsarter du får brug for
} //endclass TiBit
Det bliver lidt langsommere end ar regne på integers, men ikke meget. Jacacompileren optimerer ret så gevaldigt.
Men man skal tænke sig om når man laver sådan noget. Jeg kvajede mig fx ovenfor i konstructoren TiBit(int verdi) som den står man man jo lave en TiBit instand der indeholder en ulovlig verdi (eg: new TiBit( -5 )) det burde ikke være muligt.
public TiBit (int verdi) { if ( verdi > MAX_VALUE ) { verdi = verdi & MAX_VALUE; } if ( verdi < MIN_VALUE ) { verdi = ( (verdi & MAX_VALUE) + MAX_VALUE ) & MAX_VALUE; } this verdi = verdi; } // endconstructor
ovenfor har jeg indsat default håndtering af ulovlige verdier. det er et valg, måske det vil være mere korrekt i din situation at lave en exception, eller noget nderledes default håndtering.
Jeg har afprøvet både rbj_fp’s metode med et arry af boolean og arne_v’s metode ved brug af de sidste bit i en int. Begge virker fint, når nu man ikke kan lave en variabel på et bruger defineret bit længde.
Jakoba din TiBit klasse ser også virkelig lovede ud. Jeg har ikke afprøvet den da jeg har fået løst problemet efter rbj_fp og arne_v ’s svar.
Da alle 3 svar er brugbare ville jeg havde del pointene mellem jer. Men da experten.dk’s pointsystem ikke tillader at give point til kommentar. Har jag bare accepteret rbj_fp’s svar.
Mange tak for hjælpen LilleFisK
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.