Re: Как закодировать?
- From
- Pavel P ()
- To
- Andrew Ezhguroff
- Date
- 2002-10-08T13:11:38Z
- Area
- RU.ALGORITHMS
From: "Pavel P" <vprin@indiainfo.com>
"Andrew Ezhguroff" <eandr@com2com.ru> wrote in message
news:ans8lm$v6j$1@host.talk.ru...
[....]
> Итерации:
>
> #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), да еще контролировать кол-во знаков (из-за "клонирования"
> знакового разряда). Либо через запись с вариантами, где одно поле - целое,
а
> второе - множество.
Мало ли чего нет в стандартном Паскале. Ты его живьем то видел? С его
виртуальной машиной Р-кода? А остальные клоны имеют эти операции.
С тем же успехом можно сказать что в стандартном С тоже много чего нет
и делать это надо через n-ной место :) Хотя многие до сих пор думают
что на нем самая краткая запись :) Люди не пишите на С :) Пишите вот так :)
toBin 0 = "0"
toBin x = f x
where
f 0 = ""
f x = f (x >> 1 bitand INT_MAX) +++ toString (x bitand 1)
Сам догадаешься почему приведеный пример на порядок лучше чем твой С ?
Кстати (>>, bitand, toString, +++) стандартные функции
B.R.
Pavel
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)