10Computes the bitwise logical OR of two atoms, `a` and `b`, producing an atom.
30 ?: ?&(=(0 a) =(0 b)) d
55 > `@ub`(con 0b1111.0000 0b1.0011)
79`con` performs the bitwise operation OR, a concept that's general to computing.
80It compares each bit of its first sample to the corresponding bit of its second
81sample. If either bit is 1, the corresponding product bit is set
82to 1. Otherwise, the corresponding product bit is set to 0.
84Take the example of `(con 8 12)`. It's easy to see how this operation works when
85its samples and its product are stacked.
90 0b1100 :: 12 (product)
93Note that the names `con` (conjunction) for OR and `dis` (disjunction) for AND
94are given to opposite operators in Hoon when compared to other computing
95contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
96where `0` is false and `1` is true, bitwise OR is the logical disjunction and
97bitwise AND is the logical conjunction.
105Computes the bitwise logical AND of two atoms, `a` and `b`, producing an atom.
125 ?: ?|(=(0 a) =(0 b)) d
168`dis` performs the bitwise AND, an operation general to computing. It compares
169each bit of its first sample to the corresponding bit of its second sample. If
170both bits are 1, the corresponding product bit is set to 1. Otherwise, the
171corresponding product bit is set to 0.
173Take the example of `(dis 8 12)`. It's easy to see how this operation works when
174its samples and its product are stacked.
178 0b1100 :: 12 (sample)
179 0b1000 :: 8 (product)
182Note that the names `dis` (disjunction) for AND and `con` (conjuction) for OR
183are given to opposite operators in Hoon when compared to other computing
184contexts. That's because `0` is true in Hoon and `1` is false. Outside of Hoon,
185where `0` is false and `1` is true, bitwise OR is the logical disjunction and
186bitwise AND is the logical conjunction.
193Produces the bitwise logical XOR of two atoms, `a` and `b`, producing an atom.
214 ?: ?&(=(0 a) =(0 b)) d
219 d (add d (lsh 0 c =((end 0 1 a) (end 0 1 b))))
259`mix` performs the bitwise XOR (exclusive-OR), an operation that's general to
260computing. compares each bit of its first sample to the corresponding bit of its
261second sample. If one bit is 0 and the other bit is 1, the corresponding product
262bit is set to 1. Otherwise, the corresponding product bit is set to 0.
264Take the example of `(mix 8 12)`. It's easy to see how this operation works when
265its samples and its product are stacked.
269 0b1100 :: 12 (sample)
278Computes the bitwise logical NOT of the bottom `b` blocks of size `a`
283`a` is a block size (see [`bloq`](@/docs/reference/library/1c.md)).
296 ++ not |= [a=bloq b=@ c=@]
297 (mix c (dec (bex (mul b (bex a)))))
315 > (not 2 5 1.048.551)
318 > (not 1 1 (not 1 1 10))
324In computing in general, the bitwise operation NOT simply turns a binary
325number's `0`s into `1`s, and vice versa.
327In Hoon, we ask for a little more information to use `not`, because binary
328numbers have a number of implicit leading zeroes differently depending on on
329their [block size](@/docs/reference/library/1c.md). Decimal `7`, for example, is `0b111` in binary, and
330has one implicit zero in the context of a block of size `2`, which has a
331bitwidth of 4. Let's try `not` on `7` with a single block of size `2`.
334 > `@ub`(not 2 1 0b111)
341This happened because `0b111` is considered as `0b0111` by the `not` operator
342when dealing with a single block of size `2`. The NOT of `7`, then, is `0b1000`,
345When we pass `not` a single block of size `3`, there is a bitwidth of 8 to
346fill with binary information. So the remaining leading digits of `0b111` are,
347again, treated as `0`.
350 > `@ub`(not 3 1 0b111)
357This works when going to a smaller block size, too.
360 > `@ub`(not 1 1 0b1011)
367What's happening here may not be readily apparent. But we're only flipping the
368last block of size `1` (bitwidth 2) of the binary `0b111`. That is, we leave
369the "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