I have been programming for over an year now. I still don't get why bitwise OR and AND operators are used. They seem to return random numbers.
What mathematical purpose do they have?
Be sure to click 'more' and select 'suggest as answer'!
If you're the thread creator, be sure to click 'more' then 'Verify as Answer'!
I have been programming for over an year now. I still don't get why bitwise OR and AND operators are used. They seem to return random numbers.
What mathematical purpose do they have?
It can seem this way if your looking at the values as decimal or hex
These operations are a binary operation so it works on ones and zeroes
For example the decimal number 15 is 0F in hex or 00001111 in binary
If I and 16 with 4 I will get 4, why well consider the binary value
0000 1111 <-- 16
0000 0100 <-- 4
Only where the ones align will you have a 1 left in the answer, therefor you get 00000100 or 4
It can appear random if your looking at the number in decimal
Now the opersit is more confusing
Given
01010011 <-- 83 anded with
10010101 <-- 149 results in
00010001 <-- 17
Looking at this in decimal would be really confusing but looking at it in binary it makes perfect sense. So again only where the ones match are you left with a one. With the OR operator it wirks that you get a one where ever there is a one on either or both sides (But no carry)
So
10101010 OR
01010101 =
11111111
Then again
11110000 OR
00000000 =
11110000
Hope that clarifies the issue
Also the binary notation has values like this
128, 64, 32, 16, 8, 4, 2, 1 and to get to the decimal just add up where each bit has a one aligned with it
In low-level programming, you often use an integer to represent a collection of single bit fields, or fields that are only a few bits wide. The bit-wise operators are useful for checking the values of those fields or changing individual bits. A good example in GNU/Linux is the "file mode" field that represents permissions as a bit vector, often shown in octal. For example, "0664" = 110.110.100 means that the file is readable and writable by its owner and its group, but to the world it's read-only.
Data communications protocols often use individual bits and short fields in headers for various control purposes.
Bit-wise AND and OR are often used for device registers, where individual bits may represent the values of GPIO inputs or outputs.
Bit-wise XOR is often used for making linear-feedback shift registers, which may be used as pseudo-random number generators.
Thanks guys. You have been very helpful.
Sometimes one operand word is data and the other is a mask. Let's say that three separate binary events in I/O land are required to draw a conclusion. By using the mask we can check the conditions in parallel, rather than sequentially. Saves time.
Easier to modify.