Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Двоичные значения


Автор: GIK 13.2.2006, 14:09
Всем привет.
Хочу разобратся в двоичной записи. Начал програмировать пол года назат и до сих пор не вникал в их суть.
Мне не понятно где находится знак в двоичном числе, например в байте он вроде как находится в последнем 7-ом бите, но как тогда получается значение -128, знак веть не может находится в последнем 7-ом бите, так, как тоько он может содержит максимальное значение 128 (максимальное в смысле одним значением) ?

1 0 0 0 0 0 0 0 - 128
01111111 - 127



Автор: Chingachguk 13.2.2006, 14:26
Попробуй вывести различные числа ПОБИТОВО, например:

Код

var
 b: shortint;
 i: integer;
begin
 for b:=-128 to 127 do
   begin
      write('b=',b,' - ');
      for i:=7 dwownto 0 do write((b shr i) and 1);
      writeln;
   end;

Автор: GIK 13.2.2006, 14:37
Цитата

Попробуй вывести различные числа ПОБИТОВО, например:

Я в этот код все равно не въеду smile , мне бы кто по точнее объяснил, что есть что в двоичном представлении, а то как то на JAVA без это не пишется уже.

Автор: Akina 13.2.2006, 16:29
Цитата(GIK @ 13.2.2006, 15:09 Найти цитируемый пост)
как тогда получается значение -128

Никак... диапазон знакового байтового - от минус 128 до плюс 127... маны читать надо внимательнее.

Автор: GIK 13.2.2006, 17:16
Цитата

Никак... диапазон знакового байтового - от минус 128 до плюс 127... маны читать надо внимательнее.

Может я вопрос не корректно задал, или вообще не то говорю...
-128 это минус 128, где это минус из 8 разрядного числа хранится, в каком бите?

Автор: Akina 13.2.2006, 17:40
Отрицательные числа хранятся в дополнительном коде. Т.е. наличие 1 в старшем бите действительно означает что число отрицательное, но это вовсе НЕ ОЗНАЧАЕТ, что сброс старшего бита приводит к получению того же по модулю положительного числа.

Смотри. Плюс единица - это 0000 0001. Сколько будет минус единица? Она должна быть такая, чтобы при сложении с единицей давать ноль. Следовательно минус единица - это не 1000 0001, как с первого взгляда кажется, а 1111 1111. действительно, сложив ее с плюс единицей, получим одни нули (и дополнительно перенос в 9 разряде, но это отдельная тема). И так с любой другой парой чисел... кроме минус 128. Оно в доп. коде = 1000 0000... и нет такого положительного (с нулевым старшим битом) числа, которое при прибавлении к нему даст ноль (что с переносом, что без) - как и проистекает из его десятичного значения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)