V jednom z našich dřívějších článků jsme diskutovali o základech bitových operátorů. Doufám, že jste si tento článek prošli a jste nyní připraveni být svědky a pochopit některé praktické příklady použití těchto operátorů. Takže bez dalších řečí začneme.
1. Prohoďte hodnoty dvou proměnných
Jsem si jistý, že znáte logiku výměny hodnot dvou proměnných. Zahrnuje to převzetí třetí proměnné pro dočasné uložení jedné hodnoty a poté přiřazení této hodnoty jedné z proměnných (jejíž původní hodnota již byla přiřazena druhé proměnné).
Pokud jsou například 'a' a 'b' proměnné, jejichž hodnoty je třeba zaměnit, a 'c' je dočasná proměnná, pak standardní logika funguje následovně:
c =a;
a =b;
b =c;
Věděli jste ale, že celý tento proces výměny lze provést pomocí bitových operátorů? Ano, to je pravda a logika v takovém případě ani nevyžaduje třetí proměnnou. Zde je kód:
#include
int main()
{
int a, b;
printf("Zadejte první číslo :");
scanf("%d", &a);
printf("Zadejte druhé číslo:");
scanf("%d", &b);
printf("Podle vašeho zadání a =%d, ab =%d", a,b);
a =a ^ b;
b =a ^ b;
a =a ^ b;
printf("\nPo výměně a =%d, ab =%d", a,b);
vrátí 0;
}
Zde je výstup:
Zadejte první číslo:7
Zadejte druhé číslo:2
Podle vašeho zadání a =7 a b =2
Po výměně a =2 a b =72. Zkontrolujte počet binárních '1' v čísle
Někdy se můžete ocitnout v situaci, kdy potřebujete spočítat počet bitů nastavený na „1“ v čísle. Budete rádi, že to můžete snadno provést pomocí bitových operátorů. Zde je logika:
#include
int main()
{
int a, num_of_bits =0;
printf("Enter číslo:");
scanf("%d", &a);
while(a)
{
if(a &1)
num_of_bits++;
a =a>> 1;
}
printf("\nPočet binárních 1s v tomto čísle je %d", num_of_bits);
vrátí 0;
}Zde je výstup:
Zadejte číslo:5
Počet binárních 1 v tomto čísle je 23. C program pro kontrolu, zda je daná pozice bitu 1 nebo ne
Někdy, zvláště když pracujete na kódu, který souvisí s počítačovou sítí (protokoly atd.), musíte zkontrolovat, zda je konkrétní bitová pozice nastavena na 1 nebo ne. To lze snadno provést pomocí bitových operátorů.
Zde je kód:
#include
int main()
{
int num, position, temp;
printf("Enter číslo:");
scanf("%d", &num);
printf("Zadejte pozici bitu (zachovejte nulu jako základní index a 31 jako maximum):");
scanf("%d", &position);
if(((num>>pozice)&1) ==1)
printf("\nBit na pozici je 1");
else
printf("\nBit na pozici je 0");
return 0;
}Zde je výstup:
Zadejte číslo:2
Zadejte pozici bitu (ponechte nulu jako základní index a 31 jako maximum):3
Bit na pozici je 04. Převeďte desetinné číslo na jeho binární tvara
Bitové operátory lze také použít k převodu desítkového čísla na jeho binární formu. Zde je jedna logika:
#include
int main()
{
int num, i =0, temp =0;
int bin[32 ] ={0}; // toto inicializuje všechny prvky pole na 0
/* Zadejte číslo od uživatele */
printf("Zadejte libovolné číslo:");
scanf("%d" , &num);
for(i =31; i>=0; i--)
{
if((číslo &1) ==1)
{
bin[i] =1;
num =num>>1;
}
printf("Binární forma čísla zadané je:");
for(i=0; i<32; i++)
{
printf("%d",bin[i]);
}
return 0;
}Zde byl výstup v mém případě:
Zadejte libovolné číslo:15
Binární tvar zadaného čísla je:0000000000000000000000000001111Závěr
Čtyři příklady, které jsme zde ukázali, by vám měly stačit k tomu, abyste získali dobrou představu o tom, jak lze bitové operátory použít ve scénářích reálného světa. Vyzkoušejte je na svých strojích, vylaďte je a přimějte je udělat více nebo něco nového. V případě jakýchkoli pochybností nebo dotazů napište komentář sem.
Linux
Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy
Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy
Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy