Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Если на то нет особых причин, программисты используют тип int




Правила выбора размера целочисленных данных

Характеристики целочисленных типов данных

 

И знаковые и беззнаковые данные типа char могут принимать только 256 значений и определяется это тем, что данные этого типа занимают 1 байт и представляются 8 разрядами.

Тип данных short int или сокращенно short, занимает 2 байта и, соответственно, может принимать 216 = 65 536 значений. Данные long int или сокращенно long, занимают 4 байта и могут принимать 232 = 4 294 967 295 значений.

Особое место занимают данные типа int. Их длина выбирается компилятором 2 или 4 байта в зависимости от конструкции компьютера. Так 8-битные микроконтроллеры Atmel наиболее быстро могли работать с данными размером 2 байта, поскольку имеют 8-разрядные регистры. Современные процессоры для персональных компьютеров имеют как минимум 32-битные регистры. Исходя из этого все компиляторы, работающие под Windows, выбирают для типа int размер 4 байта.

В таблице 4.1 приведены характеристики целочисленных типов данных при программировании на С++:

 

Таблица 4.1 - Характеристики целочисленных типов данных

 

Тип данных Длина, байт Min значение Max значение
byte   -128  
unsigned byte      
short   -32 768 32 767
unsigned short      
int 4 (2 под DOS) -2 147 483 648 2 147 483 647
unsigned int 4 (2 под DOS)   4 294 967 295
long   -2 147 483 648 2 147 483 647
unsigned long     4 294 967 295

 

 

1. Если нужно экономить память, выбирайте тип char (1 байт) или short (2 байта).

2. Если значения будут превышать 32767 и важна переносимость программы (возможна компиляция ее под DOS), то выбирайте тип long (4 байта).

3. Если важна скорость вычислений, то применяйте тип int и компилятор выберет размер данных (2 или 4 байта), над которыми операции выполняются быстрее.

Поразрядные операции И, ИЛИ, НЕ, ИСКЛЮЧАЮЩЕЕ ИЛИ (&, |,~,^)

 

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

При поразрядной операции И (AND), которая обозначается &, бит результата принимает значение 1 когда и у первого и второго операнда он равен 1. Копирует в результат только те биты первого операнда, где во втором операнде находятся единицы, остальные – обнуляет. Операнд, указывающий биты, над которыми производится действие, называется маской. Таким образом, эта операция позволяет очищать или выделять заданные биты первого операнда.

Выделение значений двух разрядов и очистка значений двух разрядов (2-го и 3-го):

&
&
1100 1010 1100 1010

0000 1100 - маска 1111 0011 - маска

0000 1000 1100 0010

Выделены Очищены

В качестве примера выполним эти же вычисления в программе:

char c=0xCA; //1-й операнд = 202

cout<<(c&12) <<endl; //=8

cout<<(c&0xF3)<<endl; //=194

Чтобы записать шестнадцатеричное число (константу) CA, впереди ставят ноль и букву “икс” (х или Х): 0xCA или 0xca.

При поразрядной операции ИЛИ (OR), которая обозначается |, бит результата принимает значение 1 когда или у первого, или у второго операнда 1, или оба бита 1-цы. Применяется для установки в 1 заданных бит:

OR
1100 1010

0000 1100 - маска

1100 1110

Установлены в 1

Пример:

char c=0xCA; //1-й операнд = 202

cout<<(c|12)<<endl; //= -50

 

При поразрядной операции ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR), которая обозначается ^, бит результата принимает значение 1, когда биты первого и второго операнда имеют различные значения. Команда используется, когда нужно найти бит или биты, значение которых изменилось или когда нужно изменить значение определенных разрядов:

XOR
XOR
1100 1010 - старое значение 1100 1010

1100 0110 - новое значение 0000 1100 - маска

0000 1100 1100 0110

Изменились Изменены (инвертированы)

Пример:

char c1=0xCA,c2=0xC6;

cout<<(c1^c2)<<endl; //= 12

cout<<(c1^12)<<endl; //=-58

При поразрядной операции отрицания - НЕ (NOT), которая обозначается ~ и является однооперандной, все биты инвертируются. Имеет очень высокий приоритет, который выше, чем у операций AND, OR, XOR. Применяется совместно с предыдущими двухоперандными операциями для изменения значений одного из операндов (маски) на противоположное:

Рассмотрим еще раз пример для операции AND:

&
&
1100 1010 1100 1010

0000 1100 – маска – инвертируем 1111 0011

0000 1000 1100 0010

Выделены Очищены

Пример:

char c=0xCA; //1-й операнд = 202

cout<<(c& 12)<<endl; //= 8

cout<<(c&~12)<<endl; //= -62

 

 

Операции сдвига (<<, >>)

 

Сдвигают двоичное представление первого операнда влево или вправо на количество разрядов, задаваемое вторым операндом. Пример: 5<<2; // = 20.

Сдвиг на каждый разряд влево удваивает значение числа. Вправо – уменьшает его в 2 раза.

При сдвиге влево, справа на освободившееся место вдвигаются нули. При сдвиге вправо вдвигаются нули, если операнд беззнакового типа. Если операнд знакового типа, то повторяется старший (знаковый) разряд. Возьмем известное нам значение (–5) = 1111 1011. При сдвиге вправо с расширением знакового бита получим 1111 1101 = -3. Если бы вдвигался ноль, то знак числа изменился бы и результат стал бы равен 0111 1101 = 125, что правильно, если бы 1111 1011 было беззнаковым числом 251.

Проверка:

char c1=-5;

unsigned char c2=c1; //Разряды с1 копируются в с2

cout<<(c1/2) <<endl; //=-2

cout<<(c1>>1)<<endl; //=-3

cout<<(c2/2) <<endl; //=125

cout<<(c2>>1)<<endl; //=125

cout<<(c1<<2)<<endl; //=-20 (умножение на 4)

 

 

Задание по расчетной работе № 1

 

Расчетная работа №1 выполняется в рамках самостоятельной работы студентов по курсу "Микропроцессорная техника". На нее предусмотрено 3 часа из 54, отведенных на самостоятельную работу.

1. Взять номер варианта N, например N=23. Если номер варианта меньше 10, то перед цифрой варианта добавляется 0, например: N=05 для 5-го варианта.

2. Получить его двоичное представление (23= 10111), из которого выделить 4 младших разряда (В = 0111). Если получилось В = 0000, то принять В = 1001.

3. Получить шестнадцатеричное представление N = 2310 = 1716 и вычесть его из FF: H = FF – 17 = E8.

4. Преобразовать в двоичные числа 2N, 9N, 27NN, 45NN, например, для 23-го варианта: 223 =, 923 =, 272323 =, 452323 =. Для 5-го варианта: 205=, 905=, 270505=, 450505=.

5. Преобразовать в шестнадцатеричную и затем в двоичную 5N, 7N, 35NN, 5N9N, например, 523 =, 723 =, 352323 =, 523923 =.. Для 5-го варианта: 505=, 705=, 350505=, 505905=.

6. Преобразовать в десятичную из двоичной 11В =, 1В1 =, 1ВВВ =, 1В1В1В =, например: 11 0111 =, 10 1111 =, 1 0111 =, 1 0111 0111 0111 =, 101111011110111=.

7. Преобразовать в десятичную из шестнадцатеричной 1Н, 9Н, 8НН, 2Н3Н, например, 1Е8 =, 9Е8 =, 8Е8Е8 =, 2Е83Е8 =.

8. Преобразовать числа [H], FF[H], [H] [H] в десятичную систему как числа со знаком. Например: знЕ8 = -24, знFFE8 =, знE8E8 =.

9. Преобразовать в шестнадцатеричные двухбайтные числа со знаком: -1 =, -3 =,-1N =, -3NN =.

10. Сложить 5 СВ [ H ] Например: 5 СВ Е8

9 [ H ] EF 9 E8 EF

 

11. Вычесть 9 [ H ] 00 Например: 9 E8 00

5 FE [ H ] 5 FE E8

 

Все промежуточные вычисления должны быть подробно расписаны. Работа сначала сдается на проверку. Для зачета работы необходимо продемонстрировать умение выполнять указанные вычисления без использования таблиц, калькулятора и компьютера.

 

 


Лабораторная работа №1 – Программирование на языке Ассемблера, компиляция в машинные коды, исполнение

 




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 461; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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