Binary is the base 2 number system. Use this tag for challenges involving base 2.

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

Decimal (ie 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 ...d3d2d1d0 where the dis represent digits. The i represents the power of then of the digit. For example, d0 is the ones digit; the value of that digit is d0 x 100. In general, the value of di = di x 10i. The value of a number is i=0(di x 10i). 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 i=0(bi x 2i) where bi is the bit at the ith 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
    
history | excerpt history