Avatar billede repsak Nybegynder
04. oktober 2003 - 12:38 Der er 12 kommentarer og
1 løsning

brug af |

Hey, hvordan bruger jeg |-tegnet?

Jeg ved godt at jeg kan bruge det som 'eller', men hvad betyder så f.eks?:
private static final int HEJ = 7|20|1;

kan man ikke bruge det som f.eks. i C++ hvor man kan sætte bits?
C++:
setNoget(gul|firkantet)
Avatar billede arne_v Ekspert
04. oktober 2003 - 12:40 #1
| og || vetyder det samme i Java og C++: bitvist OR og logisk OR.
Avatar billede arne_v Ekspert
04. oktober 2003 - 12:42 #2
7 | 20 | 1 = 00111 OR 10100 OR 00001 = 10111 = 23
Avatar billede arne_v Ekspert
04. oktober 2003 - 12:43 #3
Samme i C# iøvrigt.
Avatar billede repsak Nybegynder
04. oktober 2003 - 12:43 #4
ja, men jeg forstår ikke hvordan de bruges. Hvad sættes HEJ til (hvordan er logikken)? og hvordan laver jeg en metode i java som kan kaldes med setNoget(gul|firkantet) hvor jeg så undersøger hvilke bits som er sat?
Avatar billede repsak Nybegynder
04. oktober 2003 - 12:45 #5
ok, nu forstår jeg så logikken bag HEJ :-)
hvad med metoden?
Avatar billede bearhugx Nybegynder
04. oktober 2003 - 12:45 #6
00001 = 1
00111 = 7
10100 = 20
============
10111 = 23 <-- HEJ
===========
Avatar billede arne_v Ekspert
04. oktober 2003 - 12:47 #7
Det kan jo bruges præcist som du vil.

Typisk brug er noget a la:

private final static int MASK_A = 0x01;
private final static int MASK_B = 0x02;
private final static int MASK_C = 0x04;
private final static int MASK_D = 0x08;
private final static int MASK_E = 0x10;
private final static int MASK_F = 0x20;

...

foobar(MASK_A | MASK_E);

...

public void foobar(int mask)
{
  if((mask & MASK_A) != 0) {
  }
  if((mask & MASK_B) != 0) {
  }
  if((mask & MASK_C) != 0) {
  }
  if((mask & MASK_D) != 0) {
  }
  if((mask & MASK_E) != 0) {
  }
  if((mask & MASK_F) != 0) {
  }
}
Avatar billede bearhugx Nybegynder
04. oktober 2003 - 12:49 #8
Det kommer jo an på hvad henholdsvis gul og firkantet er...


hvis firkantet f.eks. er 2 og
gul er 68 (01000100)

00000010 (2)
01000100 (68)

så vil gul|firkantet blive til 70
01000110
Avatar billede repsak Nybegynder
04. oktober 2003 - 12:58 #9
arne_v -> ok tak. Har fået lavet et eksempel som jeg kan forstå. Men jeg kan ikke lige overskue om de der masker kun virker med hex-tal?

bearhugx -> I see, men kan man ikke risikere at gul|firkantet og brun|cirkel begge giver 70 (hvor værdierne er uheldigt valgt)?
Avatar billede bearhugx Nybegynder
04. oktober 2003 - 13:06 #10
i princippet jo -- det er derfor at du f.eks. skal afsætte en bitrække til at betyde noget entydigt...

f.eks. kunne man sige at A var farve og B var figur
|---A-------| |-B-|
1 0 0 1 0 0  0 0

så ville der være plads til 4 forskellige figurer (f.eks. firkant, cirkel, streg, prik) og 64 forskellige farver....

Så ville der ikke komme noget sammenfald, hvor to kombinationer giver det samme resultat... (for de 2 sidste bits er reserveret til figuren)
Avatar billede bearhugx Nybegynder
04. oktober 2003 - 13:09 #11
Hmm .. de to sidste nuller skulle være under B'et --- evt. Copy-Waste det ind i en notepad eller lign.
Avatar billede repsak Nybegynder
04. oktober 2003 - 13:10 #12
jeg fik din pointe alligevel ;-)
Avatar billede arne_v Ekspert
04. oktober 2003 - 13:53 #13
Det behøver ikke være hex. Jeg kunne også have brugt 1,2,4,8,16 og 32 - men
det er normalt nemmere at gennemskue i hex end decimal.
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