Unfortunately bc and calc don't support xor.
Asked
Active
Viewed 3.0k times
4 Answers
41
Like this:
echo $(( 0xA ^ 0xF ))
Or if you want the answer in hex:
printf '0x%X\n' $(( 0xA ^ 0xF ))
On a side note, calc(1) does support xor as a function:
$ calc
base(16)
0xa
xor(0x22, 0x33)
0x11
Satō Katsura
- 13,138
- 2
- 31
- 48
-
1In case your numbers are binary: `printf '0x%X\n' $(( 2#1010 ^ 2#1111 ))` – Matthias Braun Feb 10 '22 at 16:50
23
With any POSIX shell:
$ printf '%#x\n' "$((0x11 ^ 0x22))"
0x33
Stéphane Chazelas
- 522,931
- 91
- 1,010
- 1,501
-
-
2@StevenPenny, note that one difference with `0x%x` is that it gives `0` instead of `0x0` for 0. – Stéphane Chazelas Jul 27 '20 at 11:36
14
gdb has powerful expression calculator:
gdb -q -ex 'print/x 0xA ^ 0xF' -ex q
A shell function:
calc_gdb() { gdb -q -ex "print/x $*" -ex q;}
calc_gdb 0xA ^ 0xF
$1 = 0x5
-
4
-
1Useful for the more general case of evaluating expressions, but not for XOR – Peter Cordes Jun 28 '16 at 08:57
7
It is possible to do that in bc:
echo 'xor(10,15)' | bc -l logic.bc
Or in hex:
echo 'obase=16;ibase=16; xor(AA,FF)' | bc -l logic.bc
Using the logic file from here.
Just do wget http://phodd.net/gnu-bc/code/logic.bc to get it.
-
Wow, that site is the `bc(1)` geek's heaven. :) Thank you for the link. – Satō Katsura Jun 28 '16 at 17:24
-
My version of "bc" doesn't seem to have the XOR function and just says: `Runtime error (func=(main), adr=51): Function xor not defined.` – slacy Oct 05 '16 at 21:13
-
@slacy did you get the `logic.bc` file referenced there? That is what defines `xor` it seems – Eric Renouf Oct 11 '16 at 17:53