Avatar billede lillefisk Nybegynder
02. november 2004 - 09:19 Der 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.
Avatar billede rbj_fp Nybegynder
02. november 2004 - 09:27 #1
opret et array af booleans på 10 elementer.
Avatar billede arne_v Ekspert
02. november 2004 - 09:56 #2
Det kan du ikke.
Avatar billede arne_v Ekspert
02. november 2004 - 09:57 #3
Brug de nederste bits af en short eller int.
Avatar billede arne_v Ekspert
02. november 2004 - 09:58 #4
Et boolean array med 10 elementer er nok logisk set det samme som 10 bit.

Men det er svært at regne på og fylder mere end 10 bit i memory.
Avatar billede rbj_fp Nybegynder
02. november 2004 - 10:00 #5
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.
Avatar billede lillefisk Nybegynder
02. november 2004 - 11:45 #6
Ik’ lige de svar jeg havde håbet på.

Men da det ikke ser ud til at Java sproget gør det muligt.
Så er det nemmeste vel at gøre som arme_v nævner at bruge de sidste 10 bit af en int.

Mange tak for jeres svar :)
Avatar billede jakoba Nybegynder
02. november 2004 - 12:17 #7
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.

mvh JakonA
Avatar billede jakoba Nybegynder
02. november 2004 - 12:50 #8
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.
Avatar billede lillefisk Nybegynder
02. november 2004 - 15:38 #9
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester