Both will give the same result, but I’d choose the |
always, because you are dealing with bits, not numbers.
In order to understand why they are equivalent you first have to understand binary numbers and binary maths:
var b = 0b0011; //binary 0011
Ok, lets do something similar to your code:
var s = b + (b << 2);
Step by step:
0011 < 2
is 1100
And to evaluate 1100 | 0011
, you simply or
every bit with its counterpart.
The result is 1111
Now, what’s (0011 < 2) + 1100
? Well, do normal addition but remember, this is binary numbers so we carry over twos not tens:
0011 +
1100
———-
1111
You see now why both will always give the same result? There will never be any carry overs so addition and oring is essentially the same: 0 + 1
and 0|1
give the same result, but again, they are totally different operations.
0
solved Solution differences in byte array to int conversion