Avatar billede onomaturgen Nybegynder
22. oktober 2003 - 10:24 Der er 12 kommentarer og
2 løsninger

Bit-vise operationer, hvorfor?

Jeg er i et ambitiøst øjeblik gået igang med en java-certificering, SCJP.
Nu er jeg kommet så langt at jeg er stødt på "bit-vise operationer".
Og mit problem er nu, at jeg finder det svært, meget svært at motivere mig selv til at komme igennem denne del af pensum. Jeg ville hade at skulle give op så tidligt, så her er mit spørgsmål:

Hvad skal man med bit-vise operationer?
Hvad er lige det smarte ved bit-vise operationer?
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:37 #1
En meget hyppig brug af bit operationer er når man skal læse/skrive
noget der skal bruges i ikke-Java sammenhæng f.eks. C programmer.
Avatar billede arne_v Ekspert
22. oktober 2003 - 10:38 #2
Net værks protokoller.

Data komprimering.

Kryptering.

Og lignende.
Avatar billede vedikkebedre Nybegynder
22. oktober 2003 - 10:42 #3
Hejsa,

Tjaa - du skal(måske) bruge bit-programmering hvis du skal tilgå andre enheder. Skal du f.eks. have fat i en vejrstation, en printer som ikke lige har en driver til, og gennerelt andre aksterne enheder, hvor du selv skal programmere interfacet over mod din application(gennem en I/O-port).

Men i daglig brug har man meget sjældent brug for at udføre bit-operationer.

Du kan læse mere på følgende tutoriel som faktisk er meget sjov og informativ om bit-operationer:
http://www.javaranch.com/campfire/StoryBits.jsp

Mvh
vedikkebedre
Avatar billede onomaturgen Nybegynder
22. oktober 2003 - 11:14 #4
Mit problem er sådan set ikke at lære at arbejde bit-vist, snarere at forstå at der skulle være en god grund til at gøre det, andet end selvpineri. Det forekommer at kræve meget,rigtig meget arbejde for selv ydmyge resultater.

Er det korrekt at man anvender bit-vise operationer, der hvor der ikke findes tilgængelige API'er, eksempelvis at kunne anvende en, for java, ukendt netværksprotokol?
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:18 #5
Det kan du vel godt sige. Man kode det selv, hvis ikke der er et
godt library der laver arbejdet for en.

Men der er jo også nogen som skal skrive de libraries.
Avatar billede arne_v Ekspert
22. oktober 2003 - 11:19 #6
Man kan ikke være en god Java programmør uden at kunne sætte en bestemt
bit i en byte/int, checke om en bestemt bit er sat, cleare en bestemt bit
og den slags.
Avatar billede onomaturgen Nybegynder
22. oktober 2003 - 11:58 #7
hhmmm......
Jeg er helt på det rene med at det hører til for en ordentlig programmør at kunne dette, som en del af en grundliggende forståelse. Om ikke andet er det ihvertfald en del af certificeringen. ;-)

Det, jeg efterlyser, er det argument, som får mig til at tænke;
bit-vise operationer, det er fedt, fordi.....
bit-vise operationer er smarte fordi....
Avatar billede onomaturgen Nybegynder
22. oktober 2003 - 11:59 #8
Det er vel i virkeligheden ikke et java-spørgsmål jeg har stillet.
Avatar billede arne_v Ekspert
22. oktober 2003 - 12:03 #9
Du skal bruge bit operationer hvis du får opgaven:

læs X bytes
øvrste 4 bit af første byte er en bit maske
nederste 4 bit af første byte = en variabel a
hvis bit 0 er sat i bit masken læs næste byte som variabel b1
hvis bit 1 er sat i bit masken læs næste byte som variabel b2
hvis bit 2 er sat i bit masken læs næste byte som variabel b3
hvis bit 3 er sat i bit masken læs næste byte som variabel b4
Avatar billede arne_v Ekspert
22. oktober 2003 - 12:04 #10
Problem-stillingerne er ikke java-specifikke.

Men det er +-*/% jo heller ikke.
Avatar billede jakoba Nybegynder
23. oktober 2003 - 04:37 #11
Prøv at tænke 'sæt' og sæt operationer istedet for 'bit-wise', så er det nemmere at gå til.

fx:
bit 0:  abbonnerer på BT-hverdage
bit 1:  abbonnerer på BT-søndag
bit 2:  skylder penge for abbonnementet.

Og så kan du meget hurting stryge listen over abbonenter igennem og finde dem der skal skrives en rykker til:
    if ( person.kundetype & 4 != 0 ) {
        // der skal sendes en rykker
    }
eller evt individuelt:
    if ( person.kundetype & 5 == 5 ) {
        // der skal sendes en rykker for BT-hverdag
    } else
    if ( person.kundetype & 6 != 6 ) {
        // der skal sendes en rykker for BT-søndag
    }

mvh JakobA
Avatar billede onomaturgen Nybegynder
23. oktober 2003 - 16:30 #12
JakobA, er du ikke lige rar at oprette et svar. Jeg deler lige pointene mellem jer, når jeg kommer hjem fra arb.
Avatar billede arne_v Ekspert
04. november 2003 - 00:00 #13
??
Avatar billede onomaturgen Nybegynder
04. november 2003 - 09:17 #14
Ok. Der kommer tilsyneladende ikke noget svar fra Jakoba.
25 til arne v, med tak for hjælpen, og 5 til vedikkebedre, for ulejligheden og linket.
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