Re: Как закодировать?

From
Andrew Ezhguroff ()
To
Alexey Krasnov
Date
2002-10-07T19:21:08Z
Area
RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>

Привет! "Alexey Krasnov" <Alexey.Krasnov@p96.f196.n5066.z2.fidonet.org>
сообщил(а):

 AE>> Все равно не работает: если у нас, например, десятичное число 192
 AE>> (двоичное - 11000000), то твоя программа выдаст 0000000011 вместо
 AE>> 0000000011000000.
 AK> а самому написать никак ?

На Си - пожалуйста (для машины с двоичной арифметикой в дополнительном
коде).

Итерации:

#include <limits.h>

void printbin(int val){
  char Buf[CHAR_BIT*sizeof(int)];
  char *Tmp = Buf;

  do{
    *Tmp++ = '0'+(val&1);
    val=(val>>1)&INT_MAX
  }while(val);

  while(Tmp!=Buf)putchar(*--Tmp);
}

Рекурсия:

void printbin(int val){
  char Tmp = (val&1)+'0';
  if(val=(val>>1)&INT_MAX)printbin(val);
  putchar(Tmp);
}

А вот в СТАНДАРТНОМ (борландовские извращения меня не интересуют) Паскале
битовых операций и сдвигов для целых нет. Так что придется делать через div
и odd (или mod), да еще контролировать кол-во знаков (из-за "клонирования"
знакового разряда). Либо через запись с вариантами, где одно поле - целое, а
второе - множество.

С уважением, Андрей.




-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)