Operator

Tags:    java

Jeg sidder lige og studere følgende java kode, problemet ligger i, at jeg ikke kender disse operatore. Det er dem, jeg gerne vil have forklaret.

for (int index=0; index<size; index++)
{
int noise = seed;
noise >>= 3;
noise ^= seed;
int carry = noise & 1;
noise >>= 1;
seed >>= 1;
seed |= (carry << 30);
noise &= 0xFF;
pixel[index] = (noise<<16) | (noise<<8) | noise;
}

Som det kan ses udfra dette eksempel, bliver der brugte disse >>= <<= bl.a. Den meste interessante er denne linje :

pixel[index] = (noise<<16) | (noise<<8) | noise;

Hvordan kan det være, man må det ? og hvad gør den :D



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
A << B - Skifter bits i A til venstre, B gange.

A <<= B - Svarer til A = A << B

MvH

Stefan Svensson
http://fusket.frac.dk



hvad med denne sætning, hvorfor må man bruge |

pixel[index] = (noise<<16) | (noise<<8) | noise;

Er der en url, hvor det hele står forklaret



| er et binært OR, prøv at læse her:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/bitwise.html

Der er lidt om de forskellige bit-operatorer.

MvH

Stefan Svensson
http://fusket.frac.dk



| er et binært OR, prøv at læse her:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/bitwise.html

Der er lidt om de forskellige bit-operatorer.

MvH

Stefan Svensson
http://fusket.frac.dk


mange tak :D



pixel[index] = (noise<<16) | (noise<<8) | noise;


Kort forklaret gør ovenstående linje det, at den gentager bit mønsteret for de første 8 bit 3 gange...

(noise << 8) : flytter bitmønsteret 8 bits til venstre
(noise << 16) : flytter bitmønsteret 16 (2*8) bits til venstre

Altså:

0000.0000.0000.0000.1010.1010 (noise)
0000.0000.1010.1010.0000.0000 (noise << 8)
1010.1010.0000.0000.0000.0000 (noise << 16)

Hvor resultatet efter logisk OR bliver:

1010.1010.1010.1010.1010.1010




t