# Logical Operations on The ASCII Symbols 0 and 1

*21 May 2023*, By Yue LI

## Definition of "ASCII bits"

The binary-digit symbols "0" and "1" are encoded as per ASCII as 0x30 and 0x31 respectively. Therefore we may call 0x30 and 0x31 *ASCII bits*.

## Goal

Define the logical operations *and*, *or*, *xor* and *not* for the ASCII bits, in terms of typical assembly instructions such as the bit-wise AND, OR, XOR etc., so that the operators produce the expected ASCII bits on the input ASCII bits.

For instance, we want to define:

*and*, such that

0x30 *and* 0x30 = 0x30,

0x30 *and* 0x31 = 0x30,

0x31 *and* 0x30 = 0x30,

0x31 *and* 0x31 = 0x31;

*or*, such that

0x30 *or* 0x30 = 0x30,

0x30 *or* 0x31 = 0x31,

0x31 *or* 0x30 = 0x31,

0x31 *or* 0x31 = 0x31;

*xor*, such that

0x30 *xor* 0x30 = 0x30,

0x30 *xor* 0x31 = 0x31,

0x31 *xor* 0x30 = 0x31,

0x31 *xor* 0x31 = 0x30;

*not*, such that

*not* 0x30 = 0x31,

*not* 0x31 = 0x30.

## Answer

Let x and y denote ASCII bits.

x *and* y ≝ x AND y

0x30 AND 0x30 = 0x30

0x30 AND 0x31 = 0x30

0x31 AND 0x30 = 0x30

0x31 AND 0x31 = 0x31

x *or* y ≝ x OR y

0x30 OR 0x30 = 0x30

0x30 OR 0x31 = 0x31

0x31 OR 0x30 = 0x31

0x31 OR 0x31 = 0x31

x *xor* y ≝ (x XOR y) OR 0x30

(0x30 XOR 0x30) OR 0x30 = 0x30

(0x30 XOR 0x31) OR 0x30 = 0x31

(0x31 XOR 0x30) OR 0x30 = 0x31

(0x31 XOR 0x31) OR 0x30 = 0x30

*We can also use + in the place of OR.*

*not* x ≝ (NOT x) − 0x9E

(NOT 0x30) − 0x9E = 0xCF − 0x9E = 0x31

(NOT 0x31) − 0x9E = 0xCE − 0x9E = 0x30

Thanks !