Сейчас на форуме: tyns777, zds, JustLife, 2nd (+4 невидимых)

 eXeL@B —› Программирование —› инвертировать число
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 05 мая 2009 21:52
· Личное сообщение · #1

Нужно инвертировать число. Например, в двоичной системе было 1011, станет 0100.
Но можно оперировать только с десятичными числами.
Вот я дкмаю, реально ли это...Не хочу через строки делать...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 05 мая 2009 22:09
· Личное сообщение · #2

b=~a;




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 05 мая 2009 22:22
· Личное сообщение · #3

Но можно оперировать только с десятичными числами.

нужно из 10-ой в 2-ую, а потом инвертирование?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 06 мая 2009 01:42
· Личное сообщение · #4

Mavlyudov пишет:
Но можно оперировать только с десятичными числами.


сам такое ограничение придумал?
достаточно
Code:
  1. ror
или
Code:
  1. bt


-----
EnJoy!





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 06 мая 2009 02:12
· Личное сообщение · #5

я не знаю, как это объяснить, но происходит считывание из файла.
В файле текст. Например такой 10000100100101100110011111001001.
Т.е. одна срочка. Я считаю, что это как бы двоичное число, считываю его в строку и потом по символам перевожу в нормальное число типа single. Из считанных 32 символов я вырезаю 21 (так надо по стандарту) и потом перевожу в single. Считанное как бы "двоичное число" на самом деле представляет мантиссу дробного двоичного числа. Т.е, если я считал '101', то это по идее 0,101b.
Code:
  1. //ПРЕОБРАЗОВАНИЕ СТРОКИ В ЧИСЛО
  2.  
  3. for i := 4 to 24 do begin
  4. if (str32[i] = '1') then begin
  5. result := result + num;
  6. end;
  7. num := num/2;
  8. end;


Проблема в том, что отрицательные числа передаются в дополнительном коде и для их преобразования в обычный вид я вичитаю 1 из числа и потом ивертирую.
Пример:
011b - 1 = 010b
далее получаем 101b

Я пока, что обошел перевод закодированных отрицательных числел так:
то, что поступило на вход в виде строки сразу преобразовал, а далее можно рассматривать преобразованную строку как входные данные(как будто это так и поступило).

Code:
  1.  begin
  2.     i:=0; j:=0; sss:='';
  3.      for i := 4 to 24 do
  4.       begin
  5.        inc(j);
  6.        sss[j]:=str32[i];
  7.       end;
  8.     i:=21;
  9.       repeat
  10.        if sss[i]='1' then sss[i]:='0' else
  11.        if sss[i]='0' then sss[i]:='1';
  12.        dec(i);
  13.       until sss[i+1]='0';
  14.      i:=0; ss2:='';
  15.     for i := 1 to 21 do
  16.      begin
  17.                    if(sss[i] = '0') then ss2:=ss2+'1';
  18.       if(sss[i] = '1') then ss2:=ss2+'0';
  19.      end;
  20.      sss:=ss2;
  21.       j:=0;
  22.      for i := 4 to 24 do
  23.       begin
  24.        inc(j);
  25.        str32[i]:=sss[j];
  26.       end;
  27.    end; //mt1


Просто хотел уточнить, моет есть способ попроще, чтобы считать слово, вырезать 21 символ, преобразовать, а потом (если оно отрицательное) учесть это и сделать из него нормально число...



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 мая 2009 03:33
· Личное сообщение · #6

А что за стандарт такой? По IEEE 754 — 23 бита на мантису. Да и код там прямой, в любом случае ;)


 eXeL@B —› Программирование —› инвертировать число
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати