TheAlgorithms-Python

Форк
0
86 строк · 2.5 Кб
1
def get_reverse_bit_string(number: int) -> str:
2
    """
3
    return the bit string of an integer
4

5
    >>> get_reverse_bit_string(9)
6
    '10010000000000000000000000000000'
7
    >>> get_reverse_bit_string(43)
8
    '11010100000000000000000000000000'
9
    >>> get_reverse_bit_string(2873)
10
    '10011100110100000000000000000000'
11
    >>> get_reverse_bit_string("this is not a number")
12
    Traceback (most recent call last):
13
        ...
14
    TypeError: operation can not be conducted on a object of type str
15
    """
16
    if not isinstance(number, int):
17
        msg = (
18
            "operation can not be conducted on a object of type "
19
            f"{type(number).__name__}"
20
        )
21
        raise TypeError(msg)
22
    bit_string = ""
23
    for _ in range(32):
24
        bit_string += str(number % 2)
25
        number = number >> 1
26
    return bit_string
27

28

29
def reverse_bit(number: int) -> str:
30
    """
31
    Take in an 32 bit integer, reverse its bits,
32
    return a string of reverse bits
33

34
    result of a reverse_bit and operation on the integer provided.
35

36
    >>> reverse_bit(25)
37
    '00000000000000000000000000011001'
38
    >>> reverse_bit(37)
39
    '00000000000000000000000000100101'
40
    >>> reverse_bit(21)
41
    '00000000000000000000000000010101'
42
    >>> reverse_bit(58)
43
    '00000000000000000000000000111010'
44
    >>> reverse_bit(0)
45
    '00000000000000000000000000000000'
46
    >>> reverse_bit(256)
47
    '00000000000000000000000100000000'
48
    >>> reverse_bit(-1)
49
    Traceback (most recent call last):
50
        ...
51
    ValueError: the value of input must be positive
52

53
    >>> reverse_bit(1.1)
54
    Traceback (most recent call last):
55
        ...
56
    TypeError: Input value must be a 'int' type
57

58
    >>> reverse_bit("0")
59
    Traceback (most recent call last):
60
        ...
61
    TypeError: '<' not supported between instances of 'str' and 'int'
62
    """
63
    if number < 0:
64
        raise ValueError("the value of input must be positive")
65
    elif isinstance(number, float):
66
        raise TypeError("Input value must be a 'int' type")
67
    elif isinstance(number, str):
68
        raise TypeError("'<' not supported between instances of 'str' and 'int'")
69
    result = 0
70
    # iterator over [1 to 32],since we are dealing with 32 bit integer
71
    for _ in range(1, 33):
72
        # left shift the bits by unity
73
        result = result << 1
74
        # get the end bit
75
        end_bit = number % 2
76
        # right shift the bits by unity
77
        number = number >> 1
78
        # add that bit to our ans
79
        result = result | end_bit
80
    return get_reverse_bit_string(result)
81

82

83
if __name__ == "__main__":
84
    import doctest
85

86
    doctest.testmod()
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.