Побитови операции в С
Побитови операции в езика за програмиране 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. Тази операция не бива да се бърка с логическото отрицание „!“.
Оператори за изместване
[редактиране | редактиране на кода]Има два оператора за побитово изместване. Те са:
- Изместване вдясно (>>)
- Изместване вляво (<<)
Вижте също
[редактиране | редактиране на кода]Източници
[редактиране | редактиране на кода]- ↑ Kernighan. The C Programming Language. 2nd. Englewood Cliffs, NJ, Prentice Hall, March 1988. ISBN 0-13-110362-8. Архив на оригинала от 2008-11-06 в Wayback Machine.
- ↑ а б Tutorials – Bitwise Operators and Bit Manipulations in C and C++
- ↑ Exclusive-OR Gate Tutorial // Basic Electronics Tutorials.
- ↑ C++ Notes: Bitwise Operators // Архивиран от оригинала на 2017-01-16. Посетен на 2016-11-28.
Външни препратки
[редактиране | редактиране на кода]![]() ![]() |
Тази страница частично или изцяло представлява превод на страницата Bitwise operations in C в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите.
ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни. |