File size: 2,100 Bytes
62b8133
 
c9ca893
 
7172720
d924141
7172720
 
 
 
 
 
 
984a89c
c9ca893
 
 
7172720
62b8133
984a89c
62b8133
c9ca893
984a89c
c9ca893
7172720
c9ca893
 
 
 
 
2f94536
7172720
62b8133
 
 
 
c9ca893
2f94536
62b8133
 
7172720
62b8133
c9ca893
 
2f94536
62b8133
c9ca893
 
 
984a89c
c9ca893
 
984a89c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import random
import sympy as sp

title = "2's Complement Questions"
description = "This module explains the 2's complement method for representing negative numbers."

def generate_question():
    # Choose a random bit length from 4, 5, 6, and 8 bits
    bit_lengths = [4, 5, 6, 8]
    bit_length = random.choice(bit_lengths)

    # Generate a random binary number of the selected bit length
    number = ''.join(random.choice('01') for _ in range(bit_length))

    def calculate_twos_complement(number):
        ones_complement = ''.join('1' if bit == '0' else '0' for bit in number)
        twos_complement = bin(int(ones_complement, 2) + 1)[2:]
        twos_complement = twos_complement.zfill(len(number))
        return ones_complement, twos_complement

    ones_complement, correct_answer = calculate_twos_complement(number)
    options = [correct_answer]

    while len(options) < 4:
        invalid_number = ''.join(random.choice('01') for _ in range(bit_length))
        if invalid_number != correct_answer:
            options.append(invalid_number)
    
    random.shuffle(options)
    
    question = f"What is the 2's complement of the {bit_length}-bit binary number {number}?"

    num_expr = sp.sympify(f'0b{number}')
    ones_expr = sp.sympify(f'0b{ones_complement}')
    twos_expr = ones_expr + 1

    step_by_step_solution = [
        f"Step 1: Start with the original {bit_length}-bit binary number: {number}",
        f"Step 2: Find the 1's complement by flipping all bits: {ones_complement}",
        f"Step 3: Add 1 to the 1's complement:",
        f"        {ones_complement} + 1 = {bin(twos_expr)[2:].zfill(len(number))}",
        f"Step 4: The 2's complement of {number} is {correct_answer}."
    ]
    
    explanation = f"The 2's complement of the {bit_length}-bit binary number {number} is {correct_answer}. It is calculated by inverting the bits and adding 1."

    return {
        "question": question,
        "options": options,
        "correct_answer": correct_answer,
        "explanation": explanation,
        "step_by_step_solution": step_by_step_solution
    }