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)