Informatică, întrebare adresată de Catya2209, 8 ani în urmă

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

Răspuns de andrei750238
0

#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.

Alte întrebări interesante