Пример упражнения Python 55

Python 100例100 примеров на Python

Тема:Научитесь использовать побитовый оператор НЕ ~.

Пояснение:

Двоичные числа хранятся в памяти в форме дополнительного кода.

Побитовое НЕ: инвертировать каждый бит двоичного числа, 0 становится 1, 1 становится 0.

Старший бит — это знаковый бит: 0 для положительных чисел и 1 для отрицательных чисел.

Для положительных чисел старший бит равен 0, а остальные биты представляют само значение (в двоичном виде). Например, дополнительный код +42 равен 00101010.

Для отрицательных чисел возьмите дополнительный код абсолютного значения, инвертируйте его побитово, затем прибавьте 1 ко всему числу, чтобы получить дополнительный код этого числа. Например, дополнительный код -42 равен 11010110 (00101010, инвертированное побитово

равно 11010101, плюс 1 даёт 11010110).

Шаги вычисления для ~9:

转二进制:0 1001
计算补码:0 1001
按位取反:1 0110

Преобразовать в прямой код:

按位取反:1 1001  
末位加 1:1 1010
符号位为 1 是负数,即 -10

Пример

#!/usr/bin/python
# -*- coding: UTF-8 -*-

a = 7
b = ~a

c = -7
d = ~c

print ('Результат побитового НЕ для переменной a: %d' % b)
print ('Результат побитового НЕ для переменной c: %d' % d)

Результат вывода приведённого выше примера:

变量 a 取反结果为: -8
变量 c 取反结果为: 6

Пояснение:

  • ~7, выполняя побитовое НЕ для 7, дополнительный код 7 равен 00000111, инвертирование дополнительного кода даёт 11111000, старший бит 1 является знаковым битом, указывая на отрицательное число, поэтому целое число, соответствующее этому дополнительному коду, равно -8.

  • ~-7При выполнении побитового НЕ для -7 дополнительный код -7 равен 11111001, инвертирование дополнительного кода даёт 00000110, старший бит 0 является знаковым битом, указывая на положительное число, поэтому целое число, соответствующее этому дополнительному коду, равно 6.

Python 100例100 примеров на Python

Другие расширения