11Computes the bitwise logical OR of two atoms, `a` and `b`, producing an atom.
30 ?: ?&(=(0 a) =(0 b)) d
53 > `@ub`(con 0b1111.0000 0b1.0011)
77`con` performs the bitwise operation OR, a concept that's general to computing.
78It compares each bit of its first sample to the corresponding bit of its second
79sample. If either bit is 1, the corresponding product bit is set
80to 1. Otherwise, the corresponding product bit is set to 0.
82Take the example of `(con 8 12)`. It's easy to see how this operation works when
83 its samples and its product are stacked.
87 0b1100 :: 12 (product)
89Note that the names `con` (conjunction) for OR and `dis` (disjunction) for AND
90are given to opposite operators in Hoon when compared to other computing
91contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
92where `0` is false and `1` is true, bitwise OR is the logical disjunction and
93bitwise AND is the logical conjunction.
101Computes the bitwise logical AND of two atoms, `a` and `b`, producing an atom.
120 ?: ?|(=(0 a) =(0 b)) d
161`dis` performs the bitwise AND, an operation general to computing. It compares
162each bit of its first sample to the corresponding bit of its second sample. If
163both bits are 1, the corresponding product bit is set to 1. Otherwise, the
164corresponding product bit is set to 0.
166Take the example of `(dis 8 12)`. It's easy to see how this operation works when
167its samples and its product are stacked.
170 0b1100 :: 12 (sample)
171 0b1000 :: 8 (product)
173Note that the names `dis` (disjunction) for AND and `con` (conjuction) for OR
174are given to opposite operators in Hoon when compared to other computing
175contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
176where `0` is false and `1` is true, bitwise OR is the logical disjunction and
177bitwise AND is the logical conjunction.
184Produces the bitwise logical XOR of two atoms, `a` and `b`, producing an atom.
204 ?: ?&(=(0 a) =(0 b)) d
209 d (add d (lsh 0 c =((end 0 1 a) (end 0 1 b))))
246`mix` performs the bitwise XOR (exclusive-OR), an operation that's general to
247computing. compares each bit of its first sample to the corresponding bit of its
248second sample. If one bit is 0 and the other bit is 1, the corresponding product
249bit is set to 1. Otherwise, the corresponding product bit is set to 0.
251Take the example of `(mix 8 12)`. It's easy to see how this operation works when
252its samples and its product are stacked.
255 0b1100 :: 12 (sample)
263Computes the bitwise logical NOT of the bottom `b` blocks of size `a`
268`a` is a block size (see [`bloq`](../1c)).
280 ++ not |= [a=bloq b=@ c=@]
281 (mix c (dec (bex (mul b (bex a)))))
298 > (not 2 5 1.048.551)
301 > (not 1 1 (not 1 1 10))
306In computing in general, the bitwise operation NOT simply turns a binary
307number's `0`s into `1`s, and vice versa.
309In Hoon, we ask for a little more information to use `not`, because binary
310numbers have a number of implicit leading zeroes differently depending on on
311their [block size](../1c). Decimal `7`, for example, is `0b111` in binary, and
312has one implicit zero in the context of a block of size `2`, which has a
313bitwidth of 4. Let's try `not` on `7` with a single block of size `2`.
315 > `@ub`(not 2 1 0b111)
321This happened because `0b111` is considered as `0b0111` by the `not` operator
322when dealing with a single block of size `2`. The NOT of `7`, then, is `0b1000`,
325When we pass `not` a single block of size `3`, there is a bitwidth of 8 to
326fill with binary information. So the remaining leading digits of `0b111` are,
327again, treated as `0`.
329 > `@ub`(not 3 1 0b111)
335This works when going to a smaller block size, too.
337 > `@ub`(not 1 1 0b1011)
343What's happening here may not be readily apparent. But we're only flipping the
344last block of size `1` (bitwidth 2) of the binary `0b111`. That is, we leave
345the "0b1" piece just the same and manipulate the "11" that the number ends with.
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list