help with bitwise operators | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
0

help with bitwise operators

could someone explain exactly what bitwise operators do and how you're supposed to use them?

20th Nov 2016, 9:06 PM
Ángel Perales
Ángel Perales - avatar
3 Answers
+ 3
# comparing bits A bit is the smallest possible piece of information, it can either be 1 (true) or 0 (false). Bitwise operators are operators (like +, -), operating on bits. Anything goes. For example: AND (&) is only 1 if both bits you plug in are 1: 0 & 0 == 0 0 & 1 == 0 1 & 0 == 0 1 & 1 == 1 OR (|) is 1 if either bit is 1: 0 | 0 == 0 0 | 1 == 1 1 | 0 == 1 1 | 1 == 1 XOR (^) is 1 if only one input bit is 1: 0 ^ 0 == 0 0 ^ 1 == 1 1 ^ 0 == 1 1 ^ 1 == 0 NOT (!) reverses the input bit: !1 == 0 !0 == 1 There are lots more - 20 in total, C++ only knows these four though I think. # binary Any number is stored as a series of bits in memory, also known as binary. You can transform a decimal number into binary by always removing the highest power of two, for example: 45 == 32 + 8 + 4 + 1 == 2^5 + 2^3 + 2^2 + 2^0, which we would write as 101101 in binary (no 2^4 or 2^1 in the solution so those bits are 0). # bitwise operators A bitwise operator now operates on these bits of a number (or two numbers). For example: 45 & 30, would be 101101 & 011110 == 001100 which is 12 in decimal. Every bit of the left number is compared with the bit in the right number at the same position. # bit shifts There's also bit shifts, which also count as bitwise operators in C++. They shift the binary representation to the left or right. Example: 001100 >> 1 == 000110 001100 << 2 == 110000 # when to use them Domen gave probably the biggest use case - you can store multiple options inside a singe int, but he got it a bit wrong. The idea is to set a single bit in each option, and you can then check using & (not |!) whether that bit is set. Of course, that's a bit oldschool, you probably don't need to be doing that a lot. Bitwise operators are also important when doing low-level things (say, writing a driver for a graphics card), and also some game/AI stuff (check out bitboards). It's nice to know about them, sometimes they pop up in really unexpected locations.
21st Nov 2016, 12:38 AM
Schindlabua
Schindlabua - avatar
0
Bitwise operators are a comparison between to values, and it can either be a yes or no for the answer. So: if 1 == 2 { cout << "Hallo!"; //This won't happen! 1 does not equal 2. } if 7 >= 4 { cout << "Foo"; // This will happen, 7 is greater than // (or equal to) 4 }
20th Nov 2016, 9:29 PM
Keto Z
Keto Z - avatar
0
Bitwise operators as the name implies manipulate bits. You usually don't need that aspecially beginners should avoid them if possible. Numbers are structured as binary bits so for e.g. int number 5 would be 00000101 You can manipulate those bits woth bitwise operators (and, or, xor, logical shifts) so for e.g. you could use bit masking to enable stuff: // disclaimer: don't use global vars (here only to shorten example) int sound = 1; int video = 2; int subtitles = 4; // must be next bit - 3 would just set the first two variables void play(int options) { if(options & sound) play_sound(); if(options & video) play_video(); if(options & subtitles) show_subtitles(); } // call somewhere play(sound | video); Function will only play soudn and video but wont show subtitles as (001 | 010)== 011 (if bit on one side is set then it s set in result) and (011 & 001)==001 (if bit is set on both sides then it is set in result) so for subtitles the result would be 0 which is equal to false as (011 & 100)==000. But as said before don't use bitwise operations if possible as this code would be much nicer if function would accept three bool variables. Edit: I've wrote the correct explanation of the example but shomhow swapped & with | after the internet connection failed and had to rewrte the answer in a hurry... Thx @Schindlabua for spotting that
20th Nov 2016, 10:23 PM
Domen Vrankar
Domen Vrankar - avatar