C++
Să se realizeze un program care citește de la tastatură un număr N fără semn reprezentat pe 32 biți și o poziție K și setează bitul corespunzător lui 2k (pornind de la bitul cel mai puțin semnificativ) din numărul N la 1 dacă bitul inițial este 0 și 0 dacă bitul inițial este 1.
!Rezolvarea problemei se va face utilizând operații pe biți!
Date de intrare:
Numărul N (număr întreg fără semn reprezentat pe 32 biți) separat prin spațiu de poziția bitului K (K va lua valori între 0 și 32)
Date de ieșire:
Numărul rezultat în urma modificării bitului
Restricții și precizări:
Se garantează că 0 <= N <=232-1
Se garantează că 0 <= K < 32
!Rezolvarea problemei se va face utilizând operații pe biți!
Exemplu: Se consideră următorul exemplu pe 8 biți pentru simplificare: Date de intrare: 98 5
Date de iesire: 66.
Răspunsuri la întrebare
#include <iostream>
#include <stdint.h>
using namespace std;
int main()
{
uint32_t N;
uint16_t K;
std::cin >> N >> K;
uint32_t bit = 1;
for (uint16_t i = 1; i <= K; i++) bit <<= 1;
N ^= bit;
cout << N;
}
► Explicatie :
Folosim uint16_t si uint32_t aflate in fisierul stdint.h pentru a avea control mai mare asupra tipurilor de date folosite. Evident, uint16_t este un numar intreg fara semn pe 16 biti iar uint32_t este pe 32 de biti.
Functia logica XOR pentru doua valori binare a si b functioneaza in felul urmator :
- daca b este 0 atunci rezultatul in urma evaluarii este a
- daca b este 1 atunci rezultatul in urma evaluarii este !a
Noi nu o aplicam intre doua valori binare, o aplicam pe doua numere intregi fara semn pe 32 de biti, bit cu bit, dar ideea este aceasi.
Trebuie deci sa faci XOR intre N si o variabila denumita de mine "bit". Aceasta variabila are 1 pe pozitia pe care dorim sa o schimbam in N si 0 in rest. Pentru a afla valoarea acesteia realizam shiftare pe biti la stanga de K ori in variabila bit care initial are valoarea 1.
►Operatori C++ folositi :
- Shiftare pe biti la stanga a numarului a cu b pozitii : a << b. Expresia se evalueaza la valoarea shiftata dar nu schimba valoarea lui a. Pentru ca valoarea lui a sa se schimbe folosim a<<=b care este echivalent cu a = a<<b
- XOR pe biti intre a si b : a ^ b. Expresia se evalueaza la valoarea ceruta dar nu schimba valoarea lui a. Pentru ca valoarea lui a sa se schimbe folosim a^=b care este echivalent cu a = a^b
Te sfatuiesc sa consulti documentatia pentru a afla mai multe lucruri despre operatorii pe biti daca nu ai inteles cum au fost folositi.