Решение задач на определение объема информации
Тема: Решение задач на определение объема информации
Цель: Закрепить навыки решения задачи и проверить уровень усвоения знаний.
Ход дистанционного урока.
Добрый день, уважаемые коллеги! Сегодня я хочу вам показать некоторые решения задач на определение объема информации, а так же на определение объема текстовой, графической и звуковой информации. Рассмотрим с начало задачи на количество информации.
Слайд 1
Задание 1. Сравните (поставьте знак отношения ,=)
1,5 Кбайт 2136 бит
Для сравнения их нужно перевести в одинаковые единицы измерения информации. Вспомним теорию:
В одном байте – 8 битов, Можно записать в виде степени двойки 23 …
В нашем примере давайте переведем 1, 5 Кбайт в биты.
Полученное 12288 бит будет больше чем 2136 бит. Ставим знак больше. Проверяем ответ. Работаем дальше.
Задание 2 Слайд 4
Решить уравнение: 8xбит =32 Кбайт
Здесь тоже переводим в одинаковые единицы измерения в биты, еще заменяем 8 и 32 на степени двойки и получим:
(23)x бит =25*210*23 бит
23x бит =218 бит , отсюда 3x =18, x=6 бит. Ответ получили 6 бит. Ответ проверяем. Идем дальше
Задание 3 Слайд 5
Данную задачу решаем используя формулу Хартли N=2i, где N- число равновероятностных событий, i- количество информации.
Оформляем задачу, что дано по условию задачи, что нужно найти, В начале решения пишем исходную формулу, дальше переписываем формулу еще раз, вставляя в формулу то, что дано по условию задачи и находим неизвестное. Ответ 5 бит. Проверяем ответ. Переходим к следующей задаче.
Задание 4 Слайд 6
По условию этой задачи нам известно количество информации I, неизвестно N— число равновероятностных событий. вставляя в формулу Хартли известное по условию задачи находим N— количество возможных событий. N=128, проверяем ответ. Переходим к следующей задаче.
Задание 5 слайд 7
По условию этой задачи известно число равновероятностных событий, N=16 (Известно, что в составе поезда 16 вагонов ), нужно найти количество информации i. Вставляя в формулу Хартли известное, находим количество информации. Ответ 4 бит. Проверяем ответ. Переходим в меню, выбираем решение задач на определение объема текстовой информации.
Задание 1. Слайд 8.
Для определения объема текста мы так же используем формулу Хартли, N=2i, где N- количество символов данного алфавита или мы говорим мощность алфавита, i- вес одного символа данного алфавита, по другому, сколько бит или ячеек занимает двоичный код каждого символа данного алфавита. И чтобы определить объем сообщения мы количество символов в сообщении умножаем на количество информации( бит) который несет каждый символ данного алфавита. Ответ 15 байт, проверяем ответ.
Задание 2. Слайд 9.
По условию задачи нам известно, сколько символьный алфавит использовали в тексте N=64, вставляя в формулу Хартли находим информационный вес одного символа такого алфавита в битах N=2i, вставляем в формулу известное по условию задачи: 64=2i, i=6 бит — столько ячеек или бит отводится на один символ данного алфавита, и можем посчитать количество символов в тексте, К=20*40*60=48000. Нам необходимо определить объем V текста. Дальше вычисляем информационный объем текста по формуле: V=K*i, V=6*48000=288000 бит = 288000/8 = 36000 байт/1024=35,16 Кбайт. Проверяем ответ( ответ приближенно)
Задание 3. Слайд 10.
1) Вычислим общее количество символов на странице K=40*80=3200
Поскольку в кодировке ASCII один символ занимает в памяти 1 байт, общее количество информации на странице V=k*i=3200*1байт = 3200 байт, скорость дана в бит/сек. Переведем 3200 байт в биты: 3200*8 =25600 бит.
Разделим 25600 бит на 1200 бит/сек и получим 21,3 сек. Здесь нельзя округлить до 21 сек поскольку в этом случае мы не отправим всю заданную информацию.
Однако в случае передачи нескольких страниц текста для приближенного вычисления можно использовать результат 21,3 сек для дальнейших расчетов. Таким образом 10 страниц текста будут переданы за 213,3 сек.
Ответ: за 213,3 сек. Проверяем ответ.
Задание 4. Слайд 11.
По условию задачи мы можем подсчитать количество символов в алфавите: 20 букв + 10 цифр = 30 символов. Найдём информационный вес одного символа такого алфавита в битах из формулы N=2i, 30=2i,25=2i, i=5 (бит). Определяем сколько ячеек или бит отводится на один номер: 8*5 бит=40 бит.
Вычисляем информационный объём в байтах одного номера 40:8=5 байт, 40 номеров: 40*5 байт =200 байт. Ответ 200 байт. Проверяем ответ.
Задание 5. Слайд 12.
Найдём информационный в битах V= 1/512 Мб = 223 /29 бит=214 бит=16 384 бит.
Информационный объём одного символа из формулы : V=K*i, i= V/K , i=16 384 бит :1024= 214 /210 Найти: N -? 24 бит=16 бит, i=16 бит( вес одного символа).
Определим мощность алфавита N из формулы N=2i, N=216 , N= 65 536 символов. Ответ: N= 65 536 символов. Проверяем ответ.
Задание 1. Слайд 13.
Определим количество точек изображения: K=X*Y=128*128=16384 точек или пикселей.
Объем памяти на изображение выразим в битах: 4 Кб=4*1024=4 096 байт = 4096*8 бит =32768 бит.
Преобразуя формулу определения объема изображения V=K*I, вычисляем глубину цвета i=V/K, i=32768:16384=2
N=2i, N=22 где N – число цветов в палитре. N=4
Ответ: N= 4. Проверяем ответ.
Задание 2. Слайд 14.
Найдем объем видеопамяти для одной страницы: i=24 бит V=k*i, V=800*600*24=11520000 бит /8=1440000 K=800*600 байт/1024 =1406,25 Кб /1024≈1,37 Мб
1,37*4 =5,48 Мб ≈5.5 Мб для хранения 4 страниц.
Ответ: 5.5 Мб. Проверяем ответ.
Задание 3. Слайд 15.
По формуле N=2i, где N – количество цветов, i – K=1024*768 глубина цвета определим глубину цвета. 2i=65536, i=16 бит
Количество точек изображения равно: 1024768 =786 432
Требуемый объем видеопамяти равен: V=k*i, V=16 бит 786 432 = 12 582 912 бит/8 = 1572864 байт/1024 = 1536 Кбайт/1024=1,5 Мб
Ответ: 1.5 Мб. Проверяем ответ.
Задание 4. Слайд 16.
1) N=2i , 16=24, глубина цвета равна 4,
2) Определим объем видеопамяти, которая потребуется для работы монитора в режиме N=16, 640х480 и палитрой в 16 цветов. V=i*X*Y=640*480*4=1228800 бит/8= 153600 байт/1024 =150 Кб.
3) 150
Ответ: Достаточно. Проверяем ответ.
Задание 5. Слайд 17.
1) Определим объем изображения в битах:
V=i*X*Y=640*480*24 бит=7372800 бит
2) Вычисляем время в секундах на передачу изображения: 7372800 / 28800=256 секунд
Найти: t-?
Ответ: 256 секунд. Проверяем ответ.
Задание 1. Слайд 18.
Теория. В формуле N=2i, где N – количество уровней громкости, i – глубина кодирования звука, разрядность(бит).
V=H*t*i*k, где V- информационный объем звукового файла (бит), H- частота дискретизации (КГц) изображения, i-разрядность, глубина кодирования, t- длительность звучания файла, k — количество каналов звучания или режим записи, режим моно k=1, стерео k=2 ).
По формуле вычисляем объем: V=H*t*i*k, V=44,1*1000*120*16 бит*1=84 467 2000/8/1024/1024=10,09 Мбайт
Ответ: 10,09 Мбайт. Проверяем ответ.
Задание 2. Слайд 19.
1) V=H*t*i*k, Vмин=8*1000*10*8 бит*1= 84 467 2000/8/1024=78,125 Kбайт
2) Vмакс=48*1000*10*16*2=15 360 000/8/1024=1875 Kбайт
Ответ: Vмин 78,125 Кб, Vмакс=1875 Кб. Проверьте ответы.
Задание з Слайд 20.
Задача №9. Кодирование звуковой и графической информации. Передача информации.
Автор материалов — Лада Борисовна Есакова.
При оцифровке звука в памяти запоминаются только отдельные значения сигнала. Чем чаще записывается сигнал, тем лучше качество записи.
Частота дискретизации f – это количество раз в секунду, которое происходит преобразование аналогового звукового сигнала в цифровой. Измеряется в Герцах (Гц).
Глубина кодирования (а также, разрешение) – это количество бит, выделяемое на одно преобразование сигнала. Измеряется в битах (Бит).
Возможна запись нескольких каналов: одного (моно), двух (стерео), четырех (квадро).
Обозначим частоту дискретизации – f (Гц), глубину кодирования – B(бит), количество каналов – k, время записи – t(Сек).
Количество уровней дискретизации d можно рассчитать по формуле: d = 2B.
Тогда объем записанного файла V(бит) = f
Или, если нам дано количество уровней дискретизации,
V(бит) = f * log2d * k * t.
Единицы измерения объемов информации:
1 б (байт) = 8 бит
1 Кб (килобайт) = 210 б
1 Мб (мегабайт) = 220 б
1 Гб (гигабайт) = 230 б
1 Тб (терабайт) = 240 б
1 Пб (петабайт) = 250 б
При оцифровке графического изображения качество картинки зависит от количества точек и количества цветов, в которые можно раскрасить точку.
Если X – количество точек по горизонтали,
Y – количество точек по вертикали,
I – глубина цвета (количество бит, отводимых для кодирования одной точки), то количество различных цветов в палитре N = 2I.
Соответственно, I = log2N.Тогда объем файла, содержащего изображение, V(бит) = X * Y * I
Или, если нам дано количество цветов в палитре, V(бит) = X * Y * log2N.
Скорость передачи информации по каналу связи (пропускная способность канала) вычисляется как количество информации в битах, переданное за 1 секунду (бит/с).
Объем переданной информации вычисляется по формуле V = q * t, где q – пропускная способность канала, а t – время передачи.
Пример 1.
Производится двухканальная (стерео) звукозапись с частотой дискретизации 16 кГц и глубиной кодирования 32 бит. Запись длится 12 минут, ее результаты записываются в файл, сжатие данных не производится. Какое из приведенных ниже чисел наиболее близко к размеру полученного файла, выраженному в мегабайтах?
1) 30 2) 45 3) 75 4) 90
Решение:
V(бит) = f(Гц)* B(бит) * k * t(Сек),
где V – размер файла, f – частота дискретизации, B – глубина кодирования, k – количество каналов, t – время.
Значит, V(Мб) = (f * B * k * t ) / 223
Переведем все величины в требуемые единицы измерения:
V(Мб) = (16*1000 * 32 * 2 * 12 * 60 ) / 223
Представим все возможные числа, как степени двойки:
V(Мб) = (24 * 2 3 * 125 * 25 * 2 * 22 * 3 * 15 * 22) / 223 = (5625 * 217) / 223 = 5625 / 26 =
5625 / 64 ≈ 90.
Ответ: 4
!!! Без представления чисел через степени двойки вычисления становятся намного сложнее.
!!! Частота – это физическая величина, а потому 16 кГц = 16 * 1000 Гц, а не 16 * 210. Иногда этой разницей можно пренебречь, но на последних диагностических работах она влияла на правильность ответа.
Пример 2.
В течение трех минут производилась четырёхканальная (квадро) звукозапись с частотой дискретизации 16 КГц и 24-битным разрешением. Сжатие данных не производилось. Какая из приведенных ниже величин наиболее близка к размеру полученного файла?
1) 25 Мбайт
2) 35 Мбайт
3) 45 Мбайт
4) 55 Мбайт
Решение:
V(бит) = f(Гц)* B(бит) * k * t(Сек),
где V – размер файла, f – частота дискретизации, B – глубина кодирования (или разрешение), k – количество каналов, t – время.
Значит, V(Мб) = (f * B * k * t ) / 223 = (16 * 1000 * 24 * 4 * 3 * 60) / 223 = (24 * 23 * 125 * 3 * 23 * 22 * 3 * 15 * 22) / 223 = (125 * 9 * 15 * 214) / 223 = 16875 / 29 = 32, 96 ≈ 35
Ответ: 2
Пример 3.
Аналоговый звуковой сигнал был записан сначала с использованием 64 уровней дискретизации сигнала, а затем с использованием 4096 уровней дискретизации сигнала. Во сколько раз увеличился информационный объем оцифрованного звука?
1) 642) 8
3) 2
4) 12
Решение:
V(бит) = f * log2d * k * t, где V – размер файла, f – частота дискретизации, d – количество уровней дискретизации, k – количество каналов, t – время.
V1 = f * log264 * k * t = f * 6 * k * t
V2 = f * log24096 * k * t = f * 12 * k * t
V2 / V1 = 2
Правильный ответ указан под номером 3.
Ответ: 3
Кодирование изображения
Пример 4.
Какой минимальный объём памяти (в Кбайт) нужно зарезервировать, чтобы можно было сохранить любое растровое изображение размером 64×64 пикселей при условии, что в изображении могут использоваться 256 различных цветов? В ответе запишите только целое число, единицу измерения писать не нужно.
Решение:
V(бит) = X * Y * log
V (Кб) = (64 * 64 * log2256) / 213 = 212 * 8 / 213 = 4
Ответ: 4
Пример 5.
Для хранения растрового изображения размером 64×32 пикселя отвели
1 килобайт памяти. Каково максимально возможное число цветов в палитре изображения?
Решение:
V(бит) = X * Y * log2N, где V – объем памяти, X,Y – количество пикселей по горизонтали и вертикали, N – количество цветов.
log2N = V /( X*Y) = 213 / (26 * 25) = 4
N = 16
Ответ:16
Сравнение двух способов передачи данных
Пример 6.
Документ объемом 5 Мбайт можно передать с одного компьютера на другой двумя способами:
А) Сжать архиватором, передать архив по каналу связи, распаковать.
Б) Передать по каналу связи без использования архиватора.
Какой способ быстрее и насколько, если
– средняя скорость передачи данных по каналу связи составляет 218 бит в секунду,
– объем сжатого архиватором документа равен 80% от исходного,
– время, требуемое на сжатие документа – 35 секунд, на распаковку – 3 секунды?
В ответе напишите букву А, если способ А быстрее или Б, если быстрее способ Б. Сразу после буквы напишите количество секунд, насколько один способ быстрее другого. Так, например, если способ Б быстрее способа А на 23 секунды, в ответе нужно написать Б23. Слов «секунд», «сек.», «с.» к ответу добавлять не нужно.
Решение:
Способ А. Общее время складывается из времени сжатия, распаковки и передачи. Время передачи t рассчитывается по формуле t = V / q, где V — объём информации, q — скорость передачи данных.
Объем сжатого документа: 5 * 0,8 = 4 Мб =4 * 223 бит.
Найдём общее время: t = 35 с + 3 с + 4 * 223 бит / 218 бит/с = 38 + 27 с = 166 с.
Способ Б. Общее время совпадает с временем передачи: t = 5 * 223 бит / 218 бит/с = 5 * 25 с = 160 с.
Способ Б быстрее на 166 — 160 = 6 с.
Ответ: Б6
Определение времени передачи данных
Пример 7.
Скорость передачи данных через ADSL─соединение равна 128000 бит/c. Через данное соединение передают файл размером 625 Кбайт. Определите время передачи файла в секундах.
Решение:
Время t = V / q, где V — объем файла, q — скорость передачи данных.
t = 625 * 210 байт / (2 7 * 1000) бит/c = 625 * 213 бит / (125 * 210) бит/c = 5 * 23 с = 40 с.
Ответ: 40
Пример 8.
У Васи есть доступ к Интернет по высокоскоростному одностороннему радиоканалу, обеспечивающему скорость получения им информации 217 бит в секунду. У Пети нет скоростного доступа в Интернет, но есть возможность получать информацию от Васи по низкоскоростному телефонному каналу со средней скоростью 215 бит в секунду. Петя договорился с Васей, что тот будет скачивать для него данные объемом 4 Мбайта по высокоскоростному каналу и ретранслировать их Пете по низкоскоростному каналу. Компьютер Васи может начать ретрансляцию данных не раньше, чем им будут получены первые 512 Кбайт этих данных. Каков минимально возможный промежуток времени (в секундах), с момента начала скачивания Васей данных, до полного их получения Петей? В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.
Решение:
Нужно определить, сколько времени будет передаваться файл объемом 4 Мбайта по каналу со скоростью передачи данных 215 бит/с; к этому времени нужно добавить задержку файла у Васи (пока он не получит 512 Кбайт данных по каналу со скоростью 217 бит/с).
Время скачивания данных Петей: t1= 4*223 бит / 215 бит/с = 210 c.
Время задержки: t2 = 512 кб / 217 бит/с = 2(9 + 10 + 3) — 17 c = 25 c.
Полное время: t1 + t2 = 210 c + 25 c = (1024 + 32) c = 1056 c.
Ответ: 1056
Пример 9.
Данные объемом 60 Мбайт передаются из пункта А в пункт Б по каналу связи, обеспечивающему скорость передачи данных 219 бит в секунду, а затем из пункта Б в пункт В по каналу связи, обеспечивающему скорость передачи данных 220 бит в секунду. Задержка в пункте Б (время между окончанием приема данных из пункта А и началом передачи в пункт В) составляет 25 секунд. Сколько времени (в секундах) прошло с момента начала передачи данных из пункта А до их полного получения в пункте В? В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.
Решение:
Полное время складывается из времени передачи из пункта А в пункт Б (t1), задержки в пункте Б (t2) и времени передачи из пункта Б в пункт В (t3).
t1 = (60 * 223) / 219 =60 * 16 = 960 c
t2 = 25 c
t3 = (60 * 223) / 220 =60 * 8 = 480 c
Полное время t1 + t2 +t3 = 960 + 25 + 480 = 1465 c
Ответ: 1465
Спасибо за то, что пользуйтесь нашими статьями. Информация на странице «Задача №9. Кодирование звуковой и графической информации. Передача информации, Время записи звукового файла, время передачи данных, определение объема информации.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам. Чтобы успешно сдать необходимые и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими статьями из разделов нашего сайта.
Публикация обновлена: 07.04.2023
CMPXCHG8B/CMPXCHG16B — сравнение и обмен байтами
CMPXCHG8B/CMPXCHG16B — Сравните и обменяйте байтыКод операции/Инструкция | Оп/Ан | 64-битный режим | Режим совместимости/этапа | Описание |
---|---|---|---|---|
0F C7/1 CMPXCHG8B m64 | М | Действительный | Действительно* | Сравните EDX:EAX с m64 . Если они равны, установите ZF и загрузите ECX:EBX в m64 . В противном случае очистите ZF и загрузите m64 в EDX:EAX. |
REX.W + 0F C7/1 CMPXCHG16B m128 | М | Действительный | Н.В. | Сравните RDX:RAX с m128 . Если равны, установите ZF и загрузите RCX:RBX в m128 . В противном случае очистите ZF и загрузите m128 в RDX:RAX. |
* См. ниже раздел «Совместимость с архитектурой IA-32».
Кодирование операнда инструкции ¶
Оп/Р | Операнд 1 | Операнд 2 | Операнд 3 | Операнд 4 |
М | ModRM:r/m (r, w) | нет данных | нет данных | Нет данных |
Описание ¶
Сравнивает 64-битное значение в EDX:EAX (или 128-битное значение в RDX:RAX, если размер операнда равен 128 битам) с операндом (целевым операндом). Если значения равны, 64-битное значение в ECX:EBX (или 128-битное значение в RCX:RBX) сохраняется в операнде назначения. В противном случае значение в операнде назначения загружается в EDX:EAX (или RDX:RAX). Операнд назначения представляет собой 8-байтовую ячейку памяти (или 16-байтовую ячейку памяти, если размер операнда равен 128 битам). Для пар регистров EDX:EAX и ECX:EBX EDX и ECX содержат старшие 32 бита, а EAX и EBX содержат младшие 32 бита 64-битного значения. Для пар регистров RDX:RAX и RCX:RBX RDX и RCX содержат старшие 64 бита, а RAX и RBX содержат младшие 64 бита 128-битного значения.
Эту инструкцию можно использовать с префиксом LOCK, чтобы позволить выполнение инструкции атомарно. Для упрощения интерфейса к шине процессора операнд назначения получает цикл записи без оглядки на результат сравнения. Операнд назначения записывается обратно, если сравнение не удается; в противном случае исходный операнд записывается в место назначения. (Процессор никогда не производит заблокированное чтение без блокировки записи.)
В 64-битном режиме размер операции по умолчанию составляет 64 бита. Использование префикса REX.W способствует работе до 128 бит. Обратите внимание, что CMPXCHG16B требует, чтобы операнд назначения (память) был выровнен по 16 байтам. См. сводную таблицу в начале этого раздела для кодирования данных и ограничений. Для получения информации о флаге CPUID, который указывает CMPXCHG16B, см. стр. 3-237.
Совместимость с архитектурой IA-32¶
Эта кодировка инструкций не поддерживается процессорами Intel более ранними, чем процессоры Pentium.
Операция ¶
IF (64-битный режим и OperandSize = 64) ЗАТЕМ TEMP128 := НАЗНАЧЕНИЕ ЕСЛИ (RDX:RAX = TEMP128) ЗАТЕМ ЗФ := 1; НАЗНАЧЕНИЕ := RCX:RBX; ЕЩЕ ЗФ := 0; RDX:RAX := TEMP128; НАЗНАЧЕНИЕ := TEMP128; ФИ; ФИ ЕЩЕ TEMP64 := НАЗНАЧЕНИЕ; ЕСЛИ (EDX:EAX = TEMP64) ЗАТЕМ ЗФ := 1; НАЗНАЧЕНИЕ := ECX:EBX; ЕЩЕ ЗФ := 0; EDX:EAX := TEMP64; НАЗНАЧЕНИЕ := TEMP64; ФИ; ФИ; ФИ;
Затронутые флаги ¶
Флаг ZF устанавливается, если операнд назначения и EDX:EAX равны; в противном случае он очищается. Флаги CF, PF, AF, SF и OF не затрагиваются.
Исключения защищенного режима ¶
#УД | Если назначение не является операндом памяти. |
#GP(0) | Если место назначения находится в недоступном для записи сегменте. |
Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. | |
Если регистр DS, ES, FS или GS содержит селектор сегмента NULL. | |
#СС(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и выполняется невыровненная ссылка на память, когда текущий уровень привилегий равен 3. |
Исключения режима реального адреса ¶
#УД | Если операнд назначения не является ячейкой памяти. |
#GP | Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. |
#SS | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
Исключения режима Virtual-8086 ¶
#УД | Если операнд назначения не является ячейкой памяти. |
#GP(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. |
#СС(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и делается невыровненная ссылка на память. |
Исключения режима совместимости ¶
Те же исключения, что и в защищенном режиме.
Исключения 64-битного режима ¶
#СС(0) | Если адрес памяти, ссылающийся на сегмент SS, имеет неканоническую форму. |
#GP(0) | Если адрес памяти имеет неканоническую форму. |
Если операнд памяти для CMPXCHG16B не выровнен по 16-байтовой границе. | |
Если CPUID.01H:ECX.CMPXCHG16B[бит 13] = 0. | |
#УД | Если операнд назначения не является ячейкой памяти. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и делается невыровненная ссылка на память при текущем уровне привилегий 3. |
Биты, размеры, знаковые и беззнаковые
Дело в том, что переменные на компьютере имеют ограниченное количество битов. Если значение становится больше, чем может поместиться в этих битах, дополнительные биты «переполняются» и по умолчанию игнорируются.
Например:
целочисленное значение=1; /* значение для проверки, начиная с первого (младшего) бита */ for (целое число бит=0;бит<100;бит++) { std::cout<<"в бите "<(Попробуйте сейчас в NetRun!)
Поскольку "int" в настоящее время имеет 32 бита, если вы начнете с одного и добавите переменную к себе 32 раза, один переполнится и будет полностью потерян.
В ассемблере есть удобная инструкция "jo" (переход при переполнении) для проверки переполнения из предыдущей инструкции. Однако компилятор C++ не удосуживается использовать jo!
мов эди,1 ; переменная цикла дв акс,0 ; прилавок начинать: добавить eax,1 ; приращение битового счетчика добавить эди, эди ; добавить переменную к себе Джо нет ; проверьте наличие переполнения в приведенном выше добавлении cmp эди,0 начало рет нет: ; призвал к переполнению движение eax, 999 рет(Попробуйте сейчас в NetRun!)
Обратите внимание, что приведенная выше программа возвращает 999 при переполнении, которое должен проверить кто-то другой. (Правильно реагировать на переполнение на самом деле довольно сложно — см., например, взрыв Ariane 5, вызванный обнаруженным переполнением.)
Размеры хранилища C++
Восемь битов составляют «байт» (примечание: это произносится точно так же, как «укус», но всегда пишется с «y»), хотя в некоторых редких сетевых руководствах (и на французском языке) те же восемь битов будут называться «октетом». " (размеры жестких дисков указаны в гигабайтах "Go" при продаже на французском языке). В программировании для DOS и Windows 16 бит — это «WORD», 32 бита — это «DWORD» (двойное слово), а 64 бита — это «QWORD»; но в других контекстах «слово» означает естественный размер двоичной обработки машины, который в настоящее время колеблется от 32 до 64 бит. «слово» теперь следует считать двусмысленным. Указание фактического количества битов - лучший подход («Файл начинается с 32-битного двоичного целого числа, описывающего ...»).
Объект Имя С++ Биты байт
(8 бит)Шестнадцатеричные цифры
(4 бита)Восьмеричные цифры
(3 бита)Диапазон без знака Диапазон со знаком Бит нет! 1 меньше 1 меньше 1 меньше 1 0. .1 -1..0 Байт или октет символ 8 1 2 две и две трети 255 -128 .. 127 Windows СЛОВО короткий 16 2 4 пять и одна треть 65535 -32768 .. +32767 Двойное слово Windows число 32 4 8 десять и две трети >4 миллиарда -2Г . . +2Г Windows QWORD длинный 64 8 16 двадцать одна и одна треть >16 квадриллионов -8Q .. +8Q
Размеры регистров в сборке
Как и переменные C++, регистры доступны в нескольких размерах:
- rax — 64-битный регистр «длинного» размера. Он был добавлен в 2003 году. Ниже я отметил красным цветом добавленные с 64-разрядными регистрами.
- eax - это 32-битный регистр размера "int". Он был добавлен в 1985 году. Я привык использовать этот размер регистра, так как они также работают в 32-битном режиме, хотя мне, вероятно, следует использовать более длинные регистры rax для всего.
- axe — это 16-битный регистр «короткого» размера. Он был добавлен в 1979 году.
- al и ah - это 8-битные части регистра размером "char". al — младшие 8 бит (например, ax&0xff), ah — старшие 8 бит (например, ax>>8). Они оригинальные до 1972.
Любопытно, что вы можете записать 64-битное значение в rax, а затем считать младшие 32 бита из eax, или младшие 16 битx из ax, или младшие 8 бит из al — это всего лишь один регистр, но они сохраняют при продлении!
ракс: 64-бит
eax: 32-битный
топор: 16-битный
Например,мов rcx,0xf00d00d2beefc03; загрузить 64-битную константу
mov eax,ecx; вытащить младшие 32 бита
ret(Попробуйте сейчас в NetRun!)
Вот полный список регистров x86. 64-битные регистры показаны красным. Регистры «Scratch», которые вы можете перезаписывать и использовать для чего угодно. Сохраненные регистры " служат какой-то важной цели где-то еще, поэтому, как мы поговорим на следующей неделе, вы должны вернуть их обратно ("сохранить" регистр), если вы их используете - пока просто оставьте их в покое!
Примечания 64-битный
длинный32-разрядный
целое число16-битный
короткий8-бит
символЗначения возвращаются из функций в этом регистре. Инструкции умножения также помещают сюда младшие биты результата. ракс эх топор ах и ал Типовой рабочий регистр. Некоторые инструкции используют его как счетчик (например, SAL или REP). РКС ЕСХ сх ч и кл Скретч-регистр. Инструкции умножения помещают сюда старшие биты результата. РДС эдкс дх ДХ и ДЛ Сохраненный регистр: не используйте его без сохранения! рбкс ebx бх ш и бл Указатель стека. Указывает на вершину стека (подробности на следующей неделе!) рсп исп сп спл Сохраненный реестр. Иногда используется для хранения старого значения указателя стека или «базы». рбп эбп п.н. баррель Скретч-регистр. Также используется для передачи аргумента функции #2 в 64-битном режиме (в Linux). рупий ЕСИ и или Скретч-регистр. Аргумент функции №1. рди эди по до Скретч-регистр. Они были добавлены в 64-битном режиме, поэтому названия немного отличаются. р8 р8д р8в р8б Скретч-регистр. р9 р9д р9в р9б Скретч-регистр. р10 р10д р10в р10б Скретч-регистр. р11 р11д р11в р11б Сохраненный реестр. р12 р12д р12в р12б Сохраненный реестр. р13 р13д р13в р13б Сохраненный реестр. р14 р14д р14в р14б Сохраненный реестр. р15 р15д р15в р15б
Подписанные и неподписанные номера
Если вы внимательно посмотрите прямо перед переполнением, вы увидите, что происходит нечто забавное:
значение символа со знаком = 1; /* значение для проверки, начиная с первого (младшего) бита */ for (целое число бит=0;бит<100;бит++) { std::cout<<"в бите "<(Попробуйте сейчас в NetRun!)
Напечатает:
в бите 0 значение равно 1 в бите 1 значение равно 2 в бите 2 значение равно 4 в бите 3 значение равно 8 в бите 4 значение равно 16 в бите 5 значение равно 32 в бите 6 значение равно 64 в бите 7 значение равно -128 Программа завершена. Возврат 0 (0x0)Подождите, значение последнего бита равно -128? Да, это действительно так!
Этот отрицательный старший бит называется «знаковым битом» и имеет отрицательное значение в числах со знаком, дополненных до двух. Это означает, что для представления -1, например, вы устанавливаете не только старший бит, но и все остальные биты: в беззнаковом, это максимально возможное значение. Причина, по которой двоичный код 11111111 представляет собой -1, та же самая, по которой вы можете выбрать 9.999 для представления -1 на 4-значном одометре: если вы добавите единицу, вы сделаете круг и достигнете нуля.
Очень интересная вещь в дополнении до двух: сложение — одна и та же операция , независимо от того, знаковые числа или беззнаковые — мы просто интерпретируем результат по-разному. Вычитание также идентично для знакового и беззнакового. Имена регистров идентичны в ассемблере для подписанных и неподписанных. Однако, когда вы изменяете размеры регистров с помощью такой инструкции, как «movsxd rax,eax», когда вы проверяете переполнение, когда вы сравниваете числа, умножаете или делите или сдвигаете биты, вам нужно знать, подписано ли число (имеет ли знак бит) или без знака (без бита знака, без отрицательных чисел).
Подпись Без знака Язык ряд целое число без знака C++, «int» имеет знак по умолчанию. знаковый символ беззнаковый символ C++, «char» может быть подписанным или беззнаковым. мовскд мовзд Сборка, расширение знака или расширение нуля для изменения размера регистра. ио джк Сборка, «переполнение» вычисляется для значений со знаком, «перенос» — для значений без знака. джг и Сборка, «прыжок выше» подписан, «прыжок выше» не подписан.
Ваш комментарий будет первым