Avatar billede dl Nybegynder
20. januar 2006 - 20:11 Der er 16 kommentarer og
1 løsning

sæt to bit

jeg har denne lige kode

public int test;
{
  int x = 0;
  x = 1<<2;
  return x;
}

denne lille test kode, skulle gerne retunere 2, det gør den også.
men hvordan får jeg den til at retunere 3, altså bit på plads 1 og 2  er sat.

jeg har prøvet med:
{
  int x = 0;
  x = 1<<2;
  x = 1<<1;
  return x;
}
altså først sætte den ene bit, og så den anden. men virker ikke :S
??

//dennis
Avatar billede mwl Nybegynder
20. januar 2006 - 20:20 #1
x = 1<<3;?
Avatar billede jakoba Nybegynder
20. januar 2006 - 20:23 #2
"denne lille test kode, skulle gerne retunere 2, det gør den også."
prøv at teste en gang til. Jwg vil vædde på at den funktion returnere tallet 4.

for at sætte flere bit i sådan et tal bruger du 'bitwise or' operatoren | (en enklet lodret streg.

fx:
{
  int x = 0;
  x = 1<<2;
  x = x | (1<<1);  // de bit x allerede indeholder og også den bit der kommer af 1<<1
  return x;
}
resultatet skulle gerne blive 6  ...00000110

mvh JakobA
Avatar billede simonvalter Praktikant
20. januar 2006 - 20:28 #3
dl, svaret er stadig det samme som i:
http://www.eksperten.dk/spm/681322
Avatar billede jakoba Nybegynder
20. januar 2006 - 20:38 #4
dl >>
husk på at når det er med computere tælles der næsten altid op fra 0, man starter ikke med 1.

så der du skriver
"men hvordan får jeg den til at retunere 3, altså bit på plads 1 og 2  er sat."
skulle der hellere stå:
"men hvordan får jeg den til at retunere 3, altså bit på plads 0 og 1 er sat."
og det kunne så gøres med
{
  int x = 0;
  x = 1<<1;
  x = x | (1<<0);  // de bit x allerede indeholder og også den bit der kommer af 1<<0
  return x;
}
Avatar billede dl Nybegynder
21. januar 2006 - 00:23 #5
hmm ...

jeg har min int = 0;
hvis jeg på bit plads 1 og 2 ... skal have sat et et-tal.
Hvordan gør jeg det ?

//dl
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:16 #6
int variabel bits i øverste linie og sidste ciffer af bitpositioner i nederste linie:

00000000000000000000000000000000
10987654321098765432109876543210

hvilke positioner er det du HAR sat.
hvilke positioner er det du ØNSKER at sætte.

nok det sværeste ved programmering er at lære at tale så klart og utvetydigt at selv en computer can forstå det :-))
Avatar billede dl Nybegynder
21. januar 2006 - 01:19 #7
det er tale om bit.
en int.
Har = 00000000000000000000000000000000
ØNSKER = 00000000000000000000000000000011
ØNSKER også EKSEMPEL = 0000000000000000000000000001011

jeg ved denne kode, kan sætte de 3 bit.
x = 1<<1;
x = 1<<2;
x = 1<<4;

mit resultat skal være = 0000000000000000000000000001011
Avatar billede dl Nybegynder
21. januar 2006 - 01:28 #8
men det virker ikke.
det virker hvis jeg køre kunne linie: x = 1<<1 .. så får jeg 1
hvis jeg høre x=1<<1 og x=1<<2 ... så får jeg 2, men jeg skulle have 3.
Hvad går der galt?
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:29 #9
når du siger
int x = 1;  // får du 00000000000000000000000000000001
x = x << 1; // skubber bitsene i x een plads tilvenstre
                // du får 00000000000000000000000000000010
x = x << 4; // skubber bitsene i x fire pladser tilvenstre
                // du får 00000000000000000000000000010000
osv.
{
// ØNSKER = 00000000000000000000000000000011
int x = 1<<1;  // 00000000000000000000000000000010
int y = 1<<0;  // 00000000000000000000000000000001
return x | y;  // 00000000000000000000000000000011
}

{
// ØNSKER = 00000000000000000000000000001011
int z = 1<<3;    // 00000000000000000000000000001000
int x = 1<<1;    // 00000000000000000000000000000010
int y = 1<<0;    // 00000000000000000000000000000001
return x | y | z; // 00000000000000000000000000001011
}

ok?
Avatar billede dl Nybegynder
21. januar 2006 - 01:32 #10
ja, det er rigtig ... det er noget med, at man skal vende bits mønstert.
takker .. send et svar.
//dl
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:34 #11
hver gang du skriver
  x = <etellerandet>
bliver alt det der er i variabelen x smidt væk, og istedet får x værdien <eterllerandet>

det er derfor du har brug for en operator som fx | (lodret streg) så du kan få en ny værdi der kombinerer det nye med det der var i x i forvejen.
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:35 #12
ok
Avatar billede dl Nybegynder
21. januar 2006 - 01:37 #13
ja, et "or" tagn, som vender bit mønstet og lægger den anden til. og kan ikke huske og det bliver vent tilbage igen.

//dl

takker
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:43 #14
| er kun et 'or' tegn (operator) ingenting bliver vendt hverken før eller efter

jeg tror du blander det sammen med en lidt misforstået forklaring på enten & ('and' operator) eller ^ (xor operator). De har hver deres regel for hvordan to bitmønstre kombineres sammen.
Avatar billede dl Nybegynder
22. januar 2006 - 16:39 #15
det kan godt være ... jeg må lige forhør mig, hos min mester :D
//dl
Avatar billede esbenp Nybegynder
23. januar 2006 - 11:53 #16
Dette virker

    public static int test(){
        int x = 0;
        x = 1 << 1;
        x |= 1;
        return x;
    }


Det er klart det ikke kan lade sig gøre at få 3 ved at shifte bits til venstre fordi

3!=2^k

Hvad er det du prøver at opnå?

/Esben
Avatar billede dl Nybegynder
23. januar 2006 - 12:32 #17
det svar jeg har fået fra > jakoba  virker.
og han har fået de point.

hvad prøver jeg at opnå.

Min lære er ved at lave et soduku program, som gemmer de mulige result i en int, ved at se på fx, bit 1's plads, hvis den er sat så kan det være en 1'er.

så jeg prøver at rode lidt med det, så jeg kan blive bedre og få en større viden.

//dl
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