Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++

Dându-se un număr natural n și o poziție k, să se determine dacă bitul k al numărului n este 1 sau 0.

Exemplu. Pentru n = 11, care este 1011 în binar, și k = 3, răspunsul este 1 (biții se numerotează de la 0).

Explicarea algoritmului

Vom folosi proprietățile biților. Mai precis, ne vom utiliza de un bit mask, cu ajutorul căruia putem să formăm un număr cu toți biții egali cu 0, mai puțin bitul de pe poziția k a lui n. Dacă acest număr este nenul, atunci bitul este 1. În caz contrar, bitul este 0. Acest număr este chiar 2k, care se poate calcula cu shiftarea de biți (citește mai mult) apelând 1 << k. Iată un exemplu, pentru n = 197 și k = 0:

https://i.ibb.co/NFz1JbG/image.png

Implementare în C++

Folosind proprietățile menționate mai devreme, codul este următorul:

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim n și k
    int n, k;
    cin >> n >> k;

    //Calculăm bit maskul
    int bm = (1 << k);
    if(n & bm) { //Bitul este 1
        cout << "1";
    } else { //Bitul este 0
        cout << "0";
    }
    return 0;
}

Bibliografie sau alte resurse

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Cel mai frecvent element dintr-un șir în C++Al N-lea termen dintr-o progresie geometricăTipul struct în C++. Ce sunt structurile de date neomogeneAria unui triunghi folosind coordonatele acestora în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Comentarii în C++Afișarea elementelor unui vector recursiv în C++Verifică dacă un caracter este cifră în C++Maximul și minimul a trei valori în C++Verifică dacă un caracter este literă în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Aria și circumferința unui cerc în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Indicatorul lui Euler în C++Copiuțe: Cifrele unui numărInterclasarea a doi vectori în C++Ce este o funcție void în C++?Aflarea sumei primelor N sume GaussMatrice pătratice în C++. Diagonala principală și secundarăNumărul de cifre ale factorialului unui numărInversarea unui șir de caractere în C++Cum să afișezi partea întreagă a unui număr real în C++Verificarea unui an bisect în C++Verifică dacă un număr aparține șirului Fibonacci în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorCe înseamnă endl în C++?Interschimbarea a două variabile în C++ (3 metode)Cifra maximă și minimă a unui număr în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Bordarea unei matrice în C++Suma 1 + 2 + 3 + ... + N în C++Cel mai mic număr cu suma cifrelor N în C++Prima cifră a unui număr în C++Verifică dacă trei puncte sunt coliniare C++Inversarea unui vector în C++Instrucțiunea for (structuri repetitive)Oglinditul recursiv al unui număr în C++Al N-lea termen dintr-o progresie aritmeticăDo while vs while în C++ - Care e diferența?Valoarea absolută (modulul) unui număr în C++Afișarea divizorilor primi ai unui număr în C++Recursivitate în C++Suma divizorilor unui număr în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortCel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)CMMDC recursiv a două numere naturale în C++Tipuri de date în C++: numere întregi, reale, caractere și alteleTutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Instrucțiunea de decizie în C++: if, else, switch, caseCel mai mare divizor comun (CMMDC) a două numere în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleStructuri repetitive (while, do while, for, etc)Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Ce este o variabilă unsigned în C++?Numărul minim de peroane pentru o gară în C++Verifică dacă o literă este mică sau mare în C++Pointer în C++. Variabile de tipul char * (char steluță)Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăMaximul și minimul a n valori în C++Instrucțiunea do while (structuri repetitive)Verifică dacă o literă este vocală în C++Oglinditul unui număr în C++Căutare binară în C++Ce înseamnă variabilă globală și locală în C++?Instrucțiunea continue (structuri repetitive)Vectorii în C++: declarare și parcurgereOperații cu numere mari în C++ - Toate funcțiile explicateFactorialul unui număr în C++Transformarea unui număr din baza 10 în baza 2 în C++Cel mai puțin semnificativ bit în C++Distanța dintre două puncte în C++Citirea și afișarea matricelor în C++Rădăcina cubică a unui număr în C++ (cube root)Cum să calculezi instant 2 la puterea N în C++Numărul de divizori primi ai unui număr în C++Citește un șir de caractere cu spații în C++Numărul de apariții al unui număr într-un vector în C++Maximul și minimul a două valori în C++Verifică dacă un număr dat este o putere de 2 în C++Codul ASCII (tabel complet)Cum să citești și să afișezi în fișiere în C++Transformarea unui număr din baza 2 în baza 10 în C++Numere triunghiulare. Verificarea unui număr triunghiularSuma elementelor unui vector recursiv în C++Șirul lui Fibonacci în C++Instrucțiunea while (structuri repetitive)Funcții în C++. Ce sunt subprogrameleȘiruri de caractere în C++. Tot ce trebuie să știiTransformarea unei litere mari în literă mică în C++Complexitatea unui algoritm (timp și spațiu) în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiMediana unui șir de valori în C++Vectorii în C++: citire și afișareVerifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Maximul și minimul unui vector în C++Vectori de frecvență (de apariții) în C++Numărul combinărilor în C++ (formula combinărilor)Radicalul unui număr în C++ (rădăcina pătrată)Câte numere naturale sunt într-un interval dat? (C++)Verificare dacă un număr este palindrom în C++Află secolul unui an citit de la tastatură în C++Al N-lea termen Fibonacci în C++Verifică dacă un număr este par sau impar fără modulo în C++Instrucțiunea break (structuri repetitive)Cel mai semnificativ bit în C++Numărul permutărilor în C++ (formula permutărilor)Verificare dacă șir de caractere este palindrom în C++Ciurul lui Eratostene în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Divide et Impera (metodă de programare C++)Transformarea unei litere mici în literă mare în C++Calculul combinărilor de n luate câte k (nCk) în C++Cifra de control a unui numărCifra maximă a unui număr recursiv în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicSuma numerelor naturale dintr-un interval dat în C++Verificare număr prim în C++ (Clasa a IX-a)Cea mai lungă secvență de elemente crescătoare în C++Numărul de divizori al unui număr în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleGenerarea șirului Fibonacci generalizat în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont