Meerdere getallen opslaan in één int-variabele d.m.v. bitmanipulatie C++)

  • Onderwerp starter Onderwerp starter JoZ1
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JoZ1

Terugkerende gebruiker
Lid geworden
17 dec 2010
Berichten
3.418
Beste forumgenoten,

Ik ben wat kennis aan 't opdoen door een boek over C++ te lezen. Daar horen ook opgaven bij.
De volgende opgave kom ik niet uit:


"Laat zien hoe met behulp van bitoperaties de vier niet-negatieve gehele getallen a0, a1, a2, a3, elk kleiner dan 16, in een int-variabele x kunnen worden opgeborgen. Schrijf hiervoor een demonstratieprogramma; na de vier getallen van het toetsenbord te hebben gelezen vraagt het programma aan de gebruiker een getal i (gelijk aan 0, 1, 2 of 3) in te typen en haalt dan uit de variable x het getal aiom dit af te drukken."

Het probleem is dat het niet lukt om die getallen in x op te slaan.
Ik denk dat ik ruimte moet reserveren voor een a-getal in x, zoiets als dit:

Code:
0000 0000 0000 0000
//a1  a2    a3    a4

Om het vervolgens uit te lezen.

Huidige code:

[CPP]#include <iostream>
using namespace std;

int main()
{
cout << "Geef vier niet negatieve, gehele getallen kleiner dan 16.";

unsigned int x(0); unsigned short a;

for (short i = 0; i < 4; i++){
cin >> a;
if (a < 16){ // kleiner dan 16
//Hier moet het gebeuren...
}
}

system("PAUSE>NUL");
return 0;
}[/CPP]

Ik hoop dat iemand kan helpen.
 
Ja, ik ben bekend met alle operators uit de link, in de zin van dat ik weet wat ze betekenen ;)
Maar ik weet niet hoe ik ze moet toepassen in dit geval...
 
Ik zal het niet helemaal verklappen, maar ik zou beginnen met het eerste getal (dus 000000000000000000000000000000XXXX op een 32-bits computer). Met vier shifts kan je deze opschuiven naar links (dus 00000000000000000000000000XXXX0000). Nu heb je nog een andere int (000000000000000000000000000000YYYY). Met een bepaalde bitwise operator kan je van 00000000000000000000000000XXXX0000 en 000000000000000000000000000000YYYY de bits 00000000000000000000000000XXXXYYYY maken. Welke operator is dit (welke operator levert als je die toepast op een bit en 0 de waarde van die bit zelf op)? Vervolgens shift je de bits weer en doe je ditzelfde voor de andere getallen.
 
Laatst bewerkt:
Het is gelukt! Hartstikke bedankt!

[cpp]#include <iostream>
using namespace std;

int main()
{
cout << "Geef vier niet negatieve, gehele getallen kleiner dan 16:\n";
unsigned int x(0); unsigned short a;

for (short i = 0; i < 4; i++){
cin >> a;
if (a < 16){ // kleiner dan 16
if (i == 0){
x = a;
}
if (i > 0){
x <<= 4; //opschuiven naar links
x |= a; //OR
}
}
}

short y;
cout << "Welk nummer wilt u terugzien? (0, 1, 2, 3):\n";
cin >> y;

//15 = 1111 ; 240 = 1111 0000 ; 3840 = 1111 0000 0000 ; 61440 = 1111 0000 0000 0000
int bits[4] = {61440, 3840, 240, 15};
if (y >= 0 && y < 4){
cout << ((x & bits[y]) >> (3 - y) * 4);
}

system("PAUSE>NUL");
return 0;
}
[/cpp]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan