Консультация № 183989
08.09.2011, 10:06
130.47 руб.
0 2 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
1. Содержимое одного байта можно интерпретировать либо как неотрицательное целое число в диапазоне 0...255, либо как число со знаком в диапазоне -128...127. Какое число со знаком имеет тот же двоичный код, что и неотрицательное число 254?

2. Содержимое одного байта можно интерпретировать либо как число со знаком в диапазоне -128...127, либо как неотрицательное целое число в диапазоне 0...255. Какое неотрицательное число имеет тот же двоичный код, что и число со знаком -5?

3. Содержимое двухбайтового слова можно интерпретировать либо как неотрицательное целое число в диапазоне 0...65535, либо как число со знаком в диапазоне -32768...32767. Какое число со знаком имеет тот же двоичный код, что и неотрицательное число 65533?

4. Целочисленная переменная x представляет короткое целое число со знаком в диапазоне -128...127 и занимает 1 байт. Чему равно значение x после выполнения приведенного ниже фрагмента программы?
x := 30;
x := x * 5;

5. Целочисленная переменная x представляет короткое целое число со знаком в диапазоне -32768...32767 и занимает 2 байта. Чему равно значение x после выполнения приведенного ниже фрагмента программы?
x := 32760;
x := x + 10;

6. Что представляет собой двоичный код мантиссы вещественного числа 1.5 типа double?

7. Что представляет собой двоичный код мантиссы вещественного числа 0.75 типа double? Мантисса больше или равна 0 и меньше 1.

8. Что представляет собой двоичный код мантиссы вещественного числа 2.5 типа double?

9. Можно ли сохранить произвольное целое число длиной в четыре байта в вещественных переменных типа float и типа double без потери точности?

10. Всегда ли равны выражения
(x - y) + (y * 2.0), x + y
для произвольных вещественных переменных x, y типа double?

11. Всегда ли равны выражения
(x + y) + z, x + (y + z)
для произвольных вещественных переменных x, y, z типа double?

Обсуждение

давно
Профессор
230118
3054
08.09.2011, 10:21
общий
это ответ
Здравствуйте, Заречнева Вера Михайловна!

1. Это -2 в дополнительном коде. Это можно понять так 254+2=256=0(переполнение).
-2+2=0
Код 11111110.
2. 256-5=251
3. 65533 имеет тот же код, что и 65533-65536=-3
4. Умножение вызовет переполнение. Значение x=150, то есть 128+22, это будет понято как отрицательное число 150-256=-106.
5. x=32760+10-65536=-32766
6. В нормализованном виде 1.5 =0.75*2.
0.75=0.5+0.25=0.11(двоичная)
Мантисса равна 11....0
Первый бит подразумевается и не пишется, хранится в памяти будет 1....0
7.11....0
8. В нормализованном виде 2.5 =0625*4.
0.625=0.5+0.125=1/2+1/8=0.101(двоичная)
Мантисса равна 101....0
9. В типе float на мантиссу отводится 23 бита, 32 байта в нем сохранить нельзя.
В типе double на мантиссу отводится 53 бита, 32 байта в нем можно сохранить.
10. Нет, не всегда. Пусть y близко к максимальному хранящемуся числу. Тогда умножение на 2 вызовет переполнение и результат будет не точен.
11. Аналогично. Сложение x + y вызовет переполнение.
5
спасибо большое. Все стало понятно.
давно
Мастер-Эксперт
319965
1463
08.09.2011, 18:52
общий
"всегда ли равно"

Не удержался от интересного примера. Прогоните код (Delphi)

var
x: Double;
begin
x:=0.1;
if x=0.1 then Edit1.Text:='равно' else Edit1.Text:='не равно';

и увидите еще одну интересную вещь.
Форма ответа