TheAlgorithms-Python

Форк
0
/
binary_twos_complement.py 
43 строки · 1.1 Кб
1
# Information on 2's complement: https://en.wikipedia.org/wiki/Two%27s_complement
2

3

4
def twos_complement(number: int) -> str:
5
    """
6
    Take in a negative integer 'number'.
7
    Return the two's complement representation of 'number'.
8

9
    >>> twos_complement(0)
10
    '0b0'
11
    >>> twos_complement(-1)
12
    '0b11'
13
    >>> twos_complement(-5)
14
    '0b1011'
15
    >>> twos_complement(-17)
16
    '0b101111'
17
    >>> twos_complement(-207)
18
    '0b100110001'
19
    >>> twos_complement(1)
20
    Traceback (most recent call last):
21
        ...
22
    ValueError: input must be a negative integer
23
    """
24
    if number > 0:
25
        raise ValueError("input must be a negative integer")
26
    binary_number_length = len(bin(number)[3:])
27
    twos_complement_number = bin(abs(number) - (1 << binary_number_length))[3:]
28
    twos_complement_number = (
29
        (
30
            "1"
31
            + "0" * (binary_number_length - len(twos_complement_number))
32
            + twos_complement_number
33
        )
34
        if number < 0
35
        else "0"
36
    )
37
    return "0b" + twos_complement_number
38

39

40
if __name__ == "__main__":
41
    import doctest
42

43
    doctest.testmod()
44

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

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

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

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