Побитови операции в С

от Уикипедия, свободната енциклопедия

Побитови операции в езика за програмиране C са операции, които може да се извършат на битово ниво чрез използване на побитови оператори.

Побитовите операции си контрастират с тези от байтово ниво, които спрямо побитовите оператори се описват като техни логически допълнения – това са AND, OR и NOT операторите. Вместо да се изпълняват върху отделни битове, „байт-ниво“ операторито се изпълняват върху низове от осем бита (известни като байтове) наведнъж. Причината за това е, че байтът по правило е най-малката единица за адресируема памет (т.е. данни с уникален адрес на паметта.)

Това се отнася и за побитови оператори, което означава, че дори да работят само върху един бит, те не могат да приемат нищо по-малко от един байт за въвеждане.

Побитови оператори[редактиране | редактиране на кода]

C предвижда шест оператора за битова манипулация[1]

Символ Оператор
& побитово И (AND)
| побитово включващо ИЛИ (OR)
^ побитово изключващо ИЛИ (XOR)
<< отместване наляво
>> отместване надясно
~ побитово НЕ (NOT) (унарно)

Побитово AND „&“[редактиране | редактиране на кода]

бит а бит б  а & b (a И б)
0 0 0
0 1 0
1 0 0
1 1 1

Побитовият AND оператор е единствен амперсанд: &. Това е просто символ на AND, който извършва работата си върху битовете на операндите, а не върху истинната им стойност. Побитовият бинарен AND извършва логическия AND (както е показано в таблицата по-горе) на битовете във всяка позиция на число в двоична форма.

Например, работейки с байт (Тип char):

     11001000 &
     10111000 = 
     --------
     10001000

Най-значимият бит на първото число е 1 и този на второто число също е 1, така че най-значимият бит според резултата е 1; вторият най-значим бит, битът на второто число, е равен на нула, така че резултатът е 0. [2]

Побитово OR „|“[редактиране | редактиране на кода]

бит а бит б а | б (а или б)
0 0 0
0 1 1
1 0 1
1 1 1

Подобно на побитовия AND, побитовият OR работи само на битово ниво. Резултатът от него е 1, ако някой от битовете му е единица, а нула само тогава, когато и двата бита са нули. Символът е '|', който може да бъде наречен тръба[2]

   11001110
| 10011000
 = 11011110

Побитово изключващо XOR „^“[редактиране | редактиране на кода]

бит а бит б а ^ б (а XOR б)
0 0 0
0 1 1
1 0 1
1 1 0

Побитовият XOR (изключващото „или“) изпълнява логическата функция XOR, която е все едно добавяне на два бита и изхвърляне на носеното. Резултатът е нула само тогава, когато имаме две нули или две единици.[3] XOR може да се използва за превключване на битове между 1 и 0. По този начин i = i ^ 1, когато е ползвано в цикъл, превключва стойността си между 1 и 0.[4]

Побитово NOT „~“ / допълнение (унарно)[редактиране | редактиране на кода]

бит а ~а (допълнение на а)
0 1
1 0

Допълващото (~) или побитовото допълнение ни връща число, обратното по знак на даденото. По този начин, ние получаваме битовете разменени, за всеки бит със стойност 1 резултатът е 0 и обратно, за всеки бит 0 получаваме бит 1. Тази операция не бива да се бърка с логическото отрицание „!“.

Оператори за изместване[редактиране | редактиране на кода]

Има два оператора за побитово изместване. Те са:

  • Изместване вдясно (>>)
  • Изместване вляво (<<)

Вижте също[редактиране | редактиране на кода]

Източници[редактиране | редактиране на кода]

Външни препратки[редактиране | редактиране на кода]

  Тази страница частично или изцяло представлява превод на страницата Bitwise operations in C в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​