14Computes the bitwise logical OR of two atoms, `a` and `b`, producing an atom.
34 ?: ?&(=(0 a) =(0 b)) d
59 > `@ub`(con 0b1111.0000 0b1.0011)
83`con` performs the bitwise operation OR, a concept that's general to computing.
84It compares each bit of its first sample to the corresponding bit of its second
85sample. If either bit is 1, the corresponding product bit is set
86to 1. Otherwise, the corresponding product bit is set to 0.
88Take the example of `(con 8 12)`. It's easy to see how this operation works when
89its samples and its product are stacked.
94 0b1100 :: 12 (product)
97Note that the names `con` (conjunction) for OR and `dis` (disjunction) for AND
98are given to opposite operators in Hoon when compared to other computing
99contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
100where `0` is false and `1` is true, bitwise OR is the logical disjunction and
101bitwise AND is the logical conjunction.
109Computes the bitwise logical AND of two atoms, `a` and `b`, producing an atom.
129 ?: ?|(=(0 a) =(0 b)) d
172`dis` performs the bitwise AND, an operation general to computing. It compares
173each bit of its first sample to the corresponding bit of its second sample. If
174both bits are 1, the corresponding product bit is set to 1. Otherwise, the
175corresponding product bit is set to 0.
177Take the example of `(dis 8 12)`. It's easy to see how this operation works when
178its samples and its product are stacked.
182 0b1100 :: 12 (sample)
183 0b1000 :: 8 (product)
186Note that the names `dis` (disjunction) for AND and `con` (conjuction) for OR
187are given to opposite operators in Hoon when compared to other computing
188contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
189where `0` is false and `1` is true, bitwise OR is the logical disjunction and
190bitwise AND is the logical conjunction.
197Produces the bitwise logical XOR of two atoms, `a` and `b`, producing an atom.
218 ?: ?&(=(0 a) =(0 b)) d
223 d (add d (lsh 0 c =((end 0 1 a) (end 0 1 b))))
263`mix` performs the bitwise XOR (exclusive-OR), an operation that's general to
264computing. compares each bit of its first sample to the corresponding bit of its
265second sample. If one bit is 0 and the other bit is 1, the corresponding product
266bit is set to 1. Otherwise, the corresponding product bit is set to 0.
268Take the example of `(mix 8 12)`. It's easy to see how this operation works when
269its samples and its product are stacked.
273 0b1100 :: 12 (sample)
282Computes the bitwise logical NOT of the bottom `b` blocks of size `a`
287`a` is a block size (see [`bloq`](../1c)).
300 ++ not |= [a=bloq b=@ c=@]
301 (mix c (dec (bex (mul b (bex a)))))
319 > (not 2 5 1.048.551)
322 > (not 1 1 (not 1 1 10))
328In computing in general, the bitwise operation NOT simply turns a binary
329number's `0`s into `1`s, and vice versa.
331In Hoon, we ask for a little more information to use `not`, because binary
332numbers have a number of implicit leading zeroes differently depending on on
333their [block size](../1c). Decimal `7`, for example, is `0b111` in binary, and
334has one implicit zero in the context of a block of size `2`, which has a
335bitwidth of 4. Let's try `not` on `7` with a single block of size `2`.
338 > `@ub`(not 2 1 0b111)
345This happened because `0b111` is considered as `0b0111` by the `not` operator
346when dealing with a single block of size `2`. The NOT of `7`, then, is `0b1000`,
349When we pass `not` a single block of size `3`, there is a bitwidth of 8 to
350fill with binary information. So the remaining leading digits of `0b111` are,
351again, treated as `0`.
354 > `@ub`(not 3 1 0b111)
361This works when going to a smaller block size, too.
364 > `@ub`(not 1 1 0b1011)
371What's happening here may not be readily apparent. But we're only flipping the
372last block of size `1` (bitwidth 2) of the binary `0b111`. That is, we leave
373the "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