Avatar billede bris Nybegynder
24. april 2006 - 14:46 Der er 13 kommentarer og
1 løsning

"AND" operator på long

Hejsa

Jeg har brug for at bruge en && operator på en long, er det ikke muligt?
Findes der eventuelt en workaround, hvis det ikke er muligt?
Avatar billede spaceus Nybegynder
24. april 2006 - 14:48 #1
hvad er det du vil?

if(enLongVaerdi ==34 && enAndenLongVaerdi ==42)
{
.

?

kom med lidt kode ;)
Avatar billede bris Nybegynder
24. april 2006 - 14:51 #2
I princippet vil jeg:

long l = 1234;

long %% 0xFF

Det nedeste er ikke tilladt.. 0xFF er vigtigt for mig at bruge..
Avatar billede bris Nybegynder
24. april 2006 - 14:52 #3
øhh..

l && 0xFF

(går lidt for hurtigt nogen gange)
Avatar billede spaceus Nybegynder
24. april 2006 - 14:59 #4
det nok mig, men jeg kan ikke se hvad du vil..

noget med en long værdi og hex tallet 255

vil du ligge dem sammen vil du teste at værdien ikke er ens.. Jeg blank ;)
Avatar billede arne_v Ekspert
24. april 2006 - 15:11 #5
long l = 1234;
l = l & 0xFF:

maaske
Avatar billede arne_v Ekspert
24. april 2006 - 15:11 #6
&& er en logisk AND
& er en bitvis AND
Avatar billede mwl Nybegynder
24. april 2006 - 21:11 #7
Er det fordi du vil sammenligne den med begge dele? I så fald er der ingen vej uden om at sammenligne den af to gange.
Avatar billede jakoba Nybegynder
26. april 2006 - 18:38 #8
Når du skriver  0xFF  ser compileren at den højeste bit (sign bitten) er sat. og da den værdi skal udvides til en long bliver den sign-bit gentaget i alle de 56 højere bit der er i en long
eg:  0xFF  bliver til  0xFFFFFFFFFFFFFFFFL  så der sker ingenting somhelst ved at du lave bitwise & med den værdi.
    longVar & 0xFF == longVar
brug istedet  0x0FF  så den øverste bit ikke er sat. så får du
    0x0FF  bliver til  0x00000000000000FFL  og det er sandsynligvis det du vil have.
    longVar & 0x0FF == deNederste8BitAf( longVar )

mvh JakobA
Avatar billede erikjacobsen Ekspert
26. april 2006 - 18:54 #9
Interessant teori, men den holder ikke i praksis.

    System.out.println("tal1: " + 0xFF);
    System.out.println("tal2: " + 0x0FF);

    System.out.println("tal1: " + (80000000077L & 0xFF));
    System.out.println("tal2: " + (80000000077L & 0x0FF));

udskriver

tal1: 255
tal2: 255
tal1: 77
tal2: 77
Avatar billede arne_v Ekspert
26. april 2006 - 19:07 #10
saa vidt jeg ved er 0xFF en int konstant og praecis det samme som
0x0FF eller 0x000000FF

problemet med sign extension opstaar naar man har en byte med vaerdien 0xFF

PS: hvis jeg skulle give et bud paa den stoerste mangel i Java saa ville det
    netop vaere maneglen paa unsigned data typer
Avatar billede bris Nybegynder
01. maj 2006 - 11:03 #11
undskyld min lange svartid.. Jeg må indrømme, at jeg burde vide mere om det her "bit-rytteri", end jeg gør..
Dog var arne v´s første kommentarer dem som hjalp mig mest. Den fejl jeg gjorde var, at bruge den logiske i stedet for den bitvise AND. Så derfor var:

long l = 1234;
l = l & 0xFF:

løsningen på mit problem. Giv mig lige et svar Arne.
Avatar billede arne_v Ekspert
01. maj 2006 - 13:00 #12
ok
Avatar billede arne_v Ekspert
19. juni 2006 - 01:26 #13
så mangler du bare at acceptere
Avatar billede bris Nybegynder
19. juni 2006 - 07:57 #14
sorry.. :)
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