русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сдвиг можно осуществлять и вправо


Дата добавления: 2015-06-12; просмотров: 1519; Нарушение авторских прав


- в этом случае при сдвиге на 1 разряд будет производиться деление на 2,
- сдвигая вправо на 2 разряда будет производиться деление на 4 и т.д...

 

Что самое интересное, сдвиг можно производить и с десятичными числами!
Взять то же число 1010 и сдвинуть его влево - т.е. мы присоединяем дополнительный 0 со стороны младшего разряда. Получается 10010
В основе сдвига операция производится с основой системы счисления к которой относится число, над которым проводятся операции сдвига.

В Терминале при помощи Python'а можно также производить операцию сдвига применительно к числам.

Производится эта операция посредством оператора:

- "<<" для сдвига влево
- ">>" для сдвига вправо

Если применять сдвиг к десятичным числам в Питоне, то операция производится путем битового сдвига, т.е. происходит преобразование десятичного числа в двоичное, далее применяется сдвиг и полученное число снова преобразуется в десятичное.

Т.е. если мы наберем в Терминале:

 

6 << 1 # сдвигаем 6 влево на один разряд


То получим12, т.е. произошло умножение на 2

Если полученное число 12 сдвинуть влево на один разряд еще раз

 

12 << 1


Получим 24

Соответственно при сдвиге вправо происходит деление:
Сдвинем десятичное число 24 вправо на один разряд

 

24 >> 1


Получим - 12

Чтобы применить сдвиг к другой системе счисления, необходимо использовать соответствующую запись.
Например для двоичного числа:

 

0b0011 << 1


В результате получаем6
Двоичная форма записи после сдвига преобразовывается в десятичное.

4

Отрицательное число

Это числа меньше нуля, записываются с приставкой "-" перед числом...
Определение отрицательного числа: при наличии положительного числа "a" при сложении такого же отрицательного числа дает в результате НОЛЬ, т.е. при взаимном сложении они "уничтожаются"



Для двоичного формата это утверждение также справедливо

 

Естественно данные примеры производятся над ЗНАКОВЫМИ числами, в которых старший разряд отведен под указание того, какой знак у числа.
При программировании мы как правило всегда знаем с какого типа данными мы работаем - со знаковыми или беззнаковыми...
В основном, в языках программирования производится так называемое "объявление" переменной, когда мы явным образом указываем с каким типом чисел (в данном случае) мы будем работать.
При объявлении числа типом int - мы будем работать со знаковыми числами, а если число объявить как unsigned int - тогда число будет восприниматься беззнаковым (без какого либо указания на знак в старшем бите).
По умолчанию - числа используются со знаком. Если нам необходимо работать с беззнаковими числами, то мы это должны указать явно.


Если знаковое число +1 в двоичном формате прибавить к -1, то должен получиться ноль (результат будет с переполнением)

 

+   +/- знак числа
110
-110
010

 

Еще пример

 

+   +/- знак числа
310
-310
010


И еще один пример

 

+   +/- знак числа
510
-510
010


5

Перевод положительного числа в отрицательное

Для того, чтобы произвести перевод положительного двоичного числа в отрицательно надо сделать следующее:

- в исходном числе меняем все нули на единицы, а единицы на нули
- к младшему байту прибавляем 1

Например возьмем положительное двоичное число 01012 (510) и сделаем из него отрицательное
- меняем единицы на нули и нули на единицы: 10102
- прибавляем единицу к младшему разряду: 10112

Если мы говорим о двоичном числе СО ЗНАКОМ (у которого старший разряд является показателем знака: 0 - положительное число, 1 - отрицательное) то полученный результат будет соответствовать -5 в десятичной системе счисления

Возьмем 01102 (610) и тоже поменяем ему знак:
- меняем единицы на нули и нули на единицы: 10012
- прибавляем единицу к младшему разряду: 10102 (-610)

6

Вычитание двоичных чисел (столбиком)

Помните как мы производим вычитание чисел столбиком в нашей привычной десятичной системе счисления?

Вычитание десятичных чисел
Вычтем из десятичного числа 10080 число 1901
10080 - 1901 = 8179

Красным цветом выделены разряды числа

 

-  
 
   
           

 

10080 - 1901 = 8179


Вычитание двоичных чисел

Для вычитания столбиком двоичных чисел действуют те же самые правила, только в качестве заемного числа выступает число 2, а не 10, поскольку мы оперируем значением двоичной системы счисления - 2

Правила вычитания те же:
0 - 0 = 0
0 - 1 = 1 и занимает разряд из старшего бита
1 - 0 = 1
1 - 1 = 0

Вычитаем:

 

1101110 (десятичное 110)

- 10111 (десятичное 23)

=1010111 (десятичное 87)


Принцип вычитания следующий:

 

-  
  ( 11010 )
      ( 2310 )

 

Разберем процесс вычитания подробнее
Номера битов указаны красным цветом для наглядности

Разбор находится под катом...


Проверьте в Терминале его десятичное значение:

 

0b110111

Получается 87, что соответствует действительности: 110 - 23 = 87

Еще несколько примеров вычитания двоичных чисел:

В круглых скобках даны эквиваленты в десятичном формате


456 - 112 = 344

 

111001000 (456)

- 1110000 (112)

=101011000 (344)

 

234 - 12 = 222

 

11101010 (234)

- 1100 (12)

=11011110 (222)

 

345 - 232 = 113

 

101011001 (345)

- 11101000 (232)

=001110001 (113)

 

16 - 3 = 13

 

10000 (16)

- 11 (3)

= 1101 (13)

 



<== предыдущая лекция | следующая лекция ==>
Умножение «столбиком» | Деление двоичных чисел столбиком


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.688 сек.