Представление целых чисел со знаком
Для представления целых чисел со знаком используется 4 формата:
Формат | Тип данных в С# | Диапазон | Описание и инициализация в С# |
байт | byte sbyte | 0 ¸ +255 –128 ¸ +127 | byte b = 142; sbyte n = -25; |
слово | char ushort short | 0 ¸ +65535 0 ¸ +65535 –32768 ¸ +32767 | char c = 97; ushort n = 4663; short x = -36; |
двойное слово | uint int | 0 ¸ +232 – 1 –231 ¸ +231 – 1 | uint f = 42345; int g = -42345; |
расширенное двойное слово | ulong long | 0 ¸ +264 – 1 –263 ¸ +263 – 1 | ulong f = 42345; long g = -42345; |
Целые числа со знаком представляются в дополнительном коде. Дополнительный код положительного числа есть само число в шестнадцатеричной системе исчисления нужного формата.
Дополнительный код отрицательного числа формируется так:
1) модуль отрицательного числа определяется в двоичном виде;
2) слева дописываются нули до нужного формата;
3) полученное число инвертируется, в результате чего образуется обратный код;
4) к обратному коду арифметически прибавляется единица;
5) результат разбивается на тетрады и записывается в шестнадцатеричном виде в соответствии с таблицей символов шестнадцатеричного алфавита:
0 0000 4 0100 8 1000 C 1100
1 0001 5 0101 9 1001 D 1101
2 0010 6 0110 A 1010 E 1110
3 0011 7 0111 B 1011 F 1111
Пример: число – 8 в формате байта, слова, двойного слова:
Формат байта Формат слова | |||
1) модуль в двоичной форме | |||
2) дописываем нули | 0000 0000 0000 1000 | ||
3) инвертируем и прибавляем 1 | 1111 1111 1111 1000 | ||
4) в 16-ричномм виде | F8 | FF F8 | |
Формат двойного слова | |||
1) модуль в двоичной форме | |||
2) дописываем нули | 0000 0000 0000 0000 0000 0000 0000 1000 | ||
3) инвертируем и прибавляем 1 | 1111 1111 1111 1111 1111 1111 1111 1000 | ||
4) в 16-ричном виде | FF FF FF F8 | ||
Ниже представлен код метода Main(), который выполняет инициализацию числовых переменных заданными константами и вывод их значений на дисплей в десятичном и шестнадцатеричном виде.
byte byte1 = 227;
sbyte byte2 = -8;
Console.WriteLine("Число I1 (byte): {0:D}d", byte1);
Console.WriteLine("Число I1 (byte): {0:X}h\n", byte1);
Console.WriteLine("Число I2 (byte): {0:D}d", byte2);
Console.WriteLine("Число I2 (byte): {0:X}h\n", byte2);
ushort word1 = 451;
short word2 = -864;
Console.WriteLine("Число I3 (word): {0:D}d", word1);
Console.WriteLine("Число I3 (word): {0:X}h\n", word1);
Console.WriteLine("Число I4 (word): {0:D}d", word2);
Console.WriteLine("Число I4 (word): {0:X}h\n", word2);
Console.ReadKey();
Здесь для вывода используется метод WriteLine() и два спецификатора: D и X, обеспечивающие вывод целых чисел формата байта (byte, sbyte) и формата слова (ushort, short) соответственно в десятеричной и шестнадцатеричной системе счисления. Спецификатор \n производит переход на новую строку и возврат каретки.
Результат выполнения данной программы:
Число I1 (byte): 227d
Число I1 (byte): E3h
Число I2 (byte): -8d
Число I2 (byte): F8h
Число I3 (word): 451d
Число I3 (word): 1C3h
Число I4 (word): -864d
Число I4 (word): FCA0h
Задание
1. Согласно варианту выбрать из таблицы 1 целые числа I1, I2, I3 и I4.
2. Составить программу на языке С#, которая выполняет действия, описанные в пп. а – ж. Результаты каждого действия выводить на консоль в десятеричном и шестнадцатеричном формате.
а. Объявить переменные byte1 типа byte и byte2 типа sbyte и инициализировать их значениями I1, и I2 соответственно.
б. Объявить переменные word1 и word2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата байта в формат слова, и выполнить операции присваивания word1 = byte1 и word2 = byte2.
в. Инициализировать переменные word1 и word2 значениями I3, и I4 соответственно.
г. Объявить переменные dword1 и dword2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата слова в формат двойного слова, и выполнить операции присваивания dword1 = word1 и dword2 = word2.
д. Выполнить операции присваивания byte1 = word1 и byte2 = dword1; объяснить полученные результаты.
е. Объявить переменную типа char и инициализировать ее значением С из таблицы 1.
ж. С использованием неявного преобразования типов получить код символа С; использовать ранее объявленную переменную формата слова.
3. Отладить программу, получить и проанализировать результаты ее выполнения. В том числе убедиться в корректности представления чисел в шестнадцатеричном формате.
4. Составить блок-схему алгоритма, реализуемого программой.
5. Сделать выводы по лабораторной работе.
Таблица 1 Варианты заданных чисел
№ варианта | Заданные числа в десятеричной системе счисления | ||||
I1 | I2 | I3 | I4 | С | |
-56 | -172 | 'Й' | |||
-69 | -130 | 'Ц' | |||
-15 | -395 | 'У' | |||
-58 | -207 | 'К' | |||
-15 | -1134 | 'Е' | |||
-98 | -167 | 'Н' | |||
-50 | -705 | 'Г' | |||
-20 | -259 | 'Ш' | |||
-95 | -1778 | 'Щ' | |||
-116 | -200 | 'З' | |||
-13 | -610 | 'Х' | |||
-22 | -557 | 'Ф' | |||
-94 | -1909 | 'Ы' | |||
-126 | -2504 | 'В' | |||
-45 | -908 | 'А' | |||
-3 | -1323 | 'П' | |||
-31 | -1530 | 'Р' | |||
-107 | -440 | 'О' | |||
-84 | -745 | 'Л' | |||
-108 | -502 | 'Д' | |||
-113 | -1917 | 'Ж' | |||
-15 | -474 | 'Э' | |||
-65 | -205 | 'Я' | |||
-45 | -132 | 'Ч' | |||
-81 | -814 | 'С' | |||
-76 | -665 | 'М' | |||
-67 | -908 | 'И' | |||
-11 | -457 | 'Т' | |||
-37 | -124 | 'Б' | |||
-88 | -1055 | 'Ю' |
Требования к содержанию отчета
титульный лист установленного образца;
тема, цель, задание, с в т.ч. его индивидуальная часть (п.1 задания);
текст программы, реализующей заданные действия а–ж согласно п.2 задания;
краткие пояснения по выполнению каждого действия а–ж;
результаты выполнения программы и их анализ согласно п.3 задания;
блок-схема алгоритма программы (п.4 задания);
вывод по работе (п.5 задания).
Список контрольных заданий на защите отчета
1. На примере своей программы предложить какую-либо операцию неявного преобразования и пояснить ее смысл.
2. На примере своей программы предложить какую-либо операцию, требующую явного преобразования и пояснить ее смысл.
3. Выполнить операцию присваивания над заданными операндами разных форматов (например, приемник – байт, источник – слово) и пояснить, какие преобразования типов необходимо осуществить при выполнении этой операции.
4. Выполнить арифметическую операцию над заданными числовыми операндами разных форматов (например, байт+слово) и пояснить, какие преобразования типов необходимо осуществить при выполнении этой операции.
5. Предложить несколько способов реализации преобразования типов для заданной операции.
Контрольные вопросы
- Какие языки программирования поддерживает Microsoft Visual Studio?
- Как создать проект в MS Visual Studio?
- Что такое консольное приложение?
- Что такое пространство имен?
- Каково назначение метода Main()?
- Перечислить стандартные классы, задействованные в программе, а также их методы.
- Пояснить смысл предложения C#: System.Console.WriteLine(…)
- Как при помощи среды откомпилировать и выполнить проект?
- В чем отличие явного и неявного преобразования типов?
Дата добавления: 2021-12-14; просмотров: 355;