Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by threatofrain on Friday January 05, 2024 @06:19PM
(#38886412)
I've never heard of saturation arithmetic and now it all makes sense. Otherwise I thought it was more common to think of XOR as boolean addition, and OR would be represented as xy + x + y.
Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by layer8 on Friday January 05, 2024 @06:32PM
(#38886549)
Yes, true and false with AND and XOR form a mathematical ring [0]. Still, OR is also an additive operation. IMO one could give OR and XOR the same precedence.
On the other hand, there is no strict need to have a dedicated boolean XOR operator, as it works the same as = (equals).
Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by orlp on Saturday January 06, 2024 @06:30AM
(#38890539)
More than just a ring, it is the simplest finite field.
Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by o11c on Friday January 05, 2024 @07:47PM
(#38887089)
Saturation is actually the wrong way to think about bools when other operations get involved:
saturate(0 - 1) = 0
bool(0 - 1) = 1
Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by dataflow on Friday January 05, 2024 @10:53PM
(#38888230)
Fun (but not particularly useful fact) is you can also represent x OR y as 1 - (1 - x)(1 - y). This shouldn't be too weird since x OR y is equal to NOT ((NOT x) AND (NOT y)).
Re:Dennis Ritchie on the priorities of && || vs. == etc. (1982)
by nostrademons on Friday January 05, 2024 @06:21PM
(#38886439)
There's also a connection to probability: if you want the probability of A and B and C happening and they're independent, it's P(A) * P(B) * P(C). If you want the probability of A or B or C happening and they're mutually exclusive, it's P(A) + P(B) + P(C).
Similar analogue for set theory, as another commenter pointed out.
The neutral element for + is 0 (x + 0 = x for any x).
The neutral element for * is 1 (x * 1 = x for any x).
Furthermore, you have arithmetic properties like x * 0 = 0 for any x (annulation) or (x + y) * z = (x * z) + (y * z) for any x, y, z (distributivity).
Similarly:
The neutral element for OR is false (x OR false = x for any x).
The neutral element for AND is true (x AND true = x for any x).
Furthermore, x AND false = false for any x, and (x OR y) AND z = (x AND z) OR (y AND z) for any x, y, z.
So OR works very much like + algebraically, and AND works very much like *.
When using 0 and 1 for false and true, AND is exactly the same as multiplication, and OR is like addition with saturation arithmetics (i.e. 1 + 1 = 1).
The common precedence rules stem from those parallels.