# About

Tag Info

For challenges about binary, or the base 2 number system.

Binary is a number system with only two symbols, 0, and 1. Because computers work in binary, it is important that computer programmers know how to use binary.

Decimal (i.e. "normal" numbers) is Base 10. Base 10 works with powers of ten, and uses the symbols $$\\{0,1,2,3,4,5,6,7,8,9\}\$$. Our numbers are of the form $$\...d_3d_2d_1d_0\$$ where the $$\d_i\$$s represent digits. The $$\i\$$ represents the power of then of the digit. For example, $$\d_0\$$ is the ones digit; the value of that digit is $$\d_0 \times 10^0\$$. In general, the value of $$\d_i = d_i \times 10^i\$$. The value of a number is $$\\sum_{i=0}^\infty d_i \times 10^i\$$. Note that when we write numbers, we omit the leading zeros, so $$\...00001\$$ is written as $$\1\$$.

Binary works similar to decimal, except every $$\10\$$ is replaced with $$\2\$$ and only uses the symbols $$\\{0,1\}\$$. The value of a binary number is $$\\sum_{i = 0} ^ \infty b_i \times 2^i\$$ where $$\b_i\$$ is the bit (binary digit) at the $$\i\$$th place.

Useful binary operators:

• &, the bitwise and. This operator looks at the two numbers bit by bit and if and only if both numbers have a 1 at the same bit, the output will also have a 1 at that bit. For example:

  100100100100100 & 101010101010101 is

100100100100100
& 101010101010101
------------------
100000100000100

• |, the bitwise or. This operator looks at the two numbers bit by bit and if at least one number's bit is 1, the output will have a 1 at that point. Example:

  100100100100100 | 101010101010101 is

100100100100100
| 101010101010101
------------------
101110101110101

• ^, the bitwise xor. This operator looks at the two numbers bit by bit and if and only if both numbers' bit are not the same, the output will have a 1 at that bit. Example:

  100100100100100 ^ 101010101010101 is

100100100100100
^ 101010101010101
------------------
001110001110001

• ~, the bitwise not. This unary operator flips the bits of a number. Example:

  ~100001000100101 = 011110111011010

• <<, >>, >>> bitshifts. These shift a number left or right, depending on the number to the right of the operator. Bits shifted past the edge of the number are lost. << is just a fancy way (much faster way) of multiplying an integer by 2number right of operator. For example:

  100100100100100 << 5 = 010010010000000

100100100100100
001001001001000
010010010010000
100100100100000
001001001000000
010010010000000


>> and >>> differ only for negative integers. The both divide the number by 2number right of operator. >>> works like so:

  100100100100100 >>> 5 = 000001001001001

100100100100100
010010010010010
001001001001001
000100100100100
000010010010010
000001001001001


>>s only difference is with signed integers. Your computer represents negative numbers in two's complement. This means that for negative numbers, we start counting at all 1s for negative one, and count upwards by using 0s (please see wikipedia article for better explanation). With >>, the leftmost bit (ie the sign bit) is used to fill the rest of the number. Example:

  100100100100100 (-14044) >>> 5 = 111111001001001

100100100100100
110010010010010
111001001001001
111100100100100
111110010010010
111111001001001