Files
lab_encoding/questions.md
juddin22 f4d8ce20a5 I did checkpoint 1 where I created 2 variable a and b.
a stored the bits 11110000 and b stored the bits 10101010.
2026-03-22 20:38:23 -04:00

2.3 KiB

Boolean questions

Create the following variables.

a = Bits("11110000")
b = Bits("10101010")

print(a) 11110000 print(b) 10101010

For each of the following bytes, give an equivalent expression which uses only a, b, and bit operators. The answers to the first two questions are given.

  1. 01010101

~b

  1. 00000101

~a & ~b

  1. 00000001

  2. 10000000

  3. 01010000

  4. 00001010

  5. 01010000

  6. 10101011

Integer questions

These questions are difficult! Try exploring ideas with Bits in Terminal, a paper and pencil, and a whiteboard. And definitely talk with others.

  1. If a represents a positive integer, and one = Bits(1, length=len(a)), give an expression equivalent to -a, but which does not use negation.

  2. It is extremely easy to double a binary number: just shift all the bits to the left. (a << 1 is twice a.) Explain why this trick works.

  3. Consider the following:

>>> hundred = Bits(100, 8)
>>> hundred
01100100
>>> (hundred + hundred)
11001000
>>> (hundred + hundred).int
-56

Apparently 100 + 100 = -56. What's going on here?

  1. What is the bit representation of negative zero? Explain your answer.

  2. What's the largest integer that can be represented in a single byte? Explain your reasoning.

  3. What's the smallest integer that can be represented in a single byte? Explain your reasoning.

  4. What's the largest integer that can be represented in n bits? Explain your reasoning.

Text questions

  1. Look at the bits for a few different characters using the utf8 encoding. You will notice they have different bit lengths:

    >>> Bits('a', encoding='utf8')
    01100001
    >>> Bits('ñ', encoding='utf8')
    1100001110110001
    >>> Bits('♣', encoding='utf8')
    111000101001100110100011
    >>> Bits('😍', encoding='utf8')
    11110000100111111001100010001101
    

    When it's time to decode a sequence of utf8-encoded bits, the decoder somehow needs to decide when it has read enough bits to decode a character, and when it needs to keep reading. For example, the decoder will produce 'a' after reading 8 bits but after reading the first 8 bits of 'ñ', the decoder realizes it needs to read 8 more bits.

    Make a hypothesis about how this could work.