LINUX.ORG.RU
Ответ на: комментарий от hbee

2hbee :

Однако, функция для конвертации строки в  целое -- из серии 
"вычислить длину строки", т.е. ее быстрее написАть, чем вспомнить,
как работает соответствующая библтотечная фенечка:

unsigned long bit2long(char *s)
{
unsigned long r=0;
   for(;*s!='\0'; s++)
       r=(r<<=1)|(*s != '0');
   return r;
}

Die-Hard ★★★★★
()
Ответ на: комментарий от Spicinpv

нету, а зачем?

можно все записать в шестнадцатиричной форме, если хочешь систему исчисления с основанием степень двойки.

не кому не нужно писать в двоичной системе исчисления, поэтому этого нет.

anonymous
()
Ответ на: комментарий от Die-Hard

>Однако, функция для конвертации строки в целое -- из серии "вычислить длину строки", т.е. ее быстрее написАть, чем вспомнить, как работает соответствующая библтотечная фенечка

Это верно, тем более что bitset производит впечатление недоделанного. Например, если написать

unsigned long f = bitset<100>("1000101011").to_ulong();

скомпилируется, но результат будет неожиданный :-)

hbee ★★★★
()
Ответ на: комментарий от anonymous

>нету, а зачем?

Удобнее.

>можно все записать в шестнадцатиричной форме, если хочешь систему исчисления с основанием степень двойки.

Только иногда устаешь туда-сюда переводить.

>не кому не нужно писать в двоичной системе исчисления, поэтому этого нет.

Мне нужно. Для этого я себе сделал .h файл с определениями:

#define _00000000 0
#define _00000001 1
...
#define _11111111 255

И использую его во всех программах. Кстати, существуют патчи к gcc на эту тему. С ними можно записывать 0b00111001.

smartly ★★★
()
Ответ на: комментарий от smartly

Большое спасибо smartly. Чето блин както даже в голову не пришло на счет .h файла Век живи..... век учись...... И дураком помрешь.:-)

Spicinpv
() автор топика
Ответ на: комментарий от smartly

smartly (01.10.2004 23:20:29):

>>можно все записать в шестнадцатиричной форме, если хочешь систему исчисления с основанием степень двойки.

> Только иногда устаешь туда-сюда переводить.

Шестнадцатеричное представление является способом "конспектирования" двоичного. После некоторого навыка оно оказывается УДОБНЕЕ (в силу краткости), поэтому "переводить" из 2- в 16- представление требуется только новичкам. Поэтому компилятор этого не поддерживает.

Примерно как с таблицей умножения. Вы ж не делаете файл .h вида

#define _2x2 4

#define _2x3 6

и т.д.?

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Для меня требывалась прежде всего наглядность
типа
const uchar a[1024]={
	b00011111, // Г
	b00010000,
	b00010000,
	b00010000,
	b00010000,
	b00010000,
	b00010000,

	b00000111, // Д
	b00001001,
	b00001001,
	b00001001,
	b00001001,
	b00011111,
	b00010001,
        
        b00011111, // Е
	b00010000,
	b00010000,
	b00011100,
	b00010000,
	b00010000,
	b00011111
};

а вот так сразу на вскидку сказать какая буква или цифра закодирована слабо
const uchar a[1024]={
	0x0E, // ??
	0x11,
	0x11,
	0x0E,
	0x11,
	0x11,
	0x0E,

	0x0E, // ??
	0x11,
	0x11,
	0x0F,
	0x01,
	0x11,
	0x0E
};

а то все такие умные в уме надо умножать.

Spicinpv
() автор топика
Ответ на: комментарий от Spicinpv

Spicinpv (*) (05.10.2004 6:50:47):

> а вот так сразу на вскидку сказать какая буква или цифра закодирована слабо

0x0E = 0000 1110

Совершенно навскидку.

> а то все такие умные в уме надо умножать.

Ничего не надо умножать. Надо запомнить таблицу из 16 цифр:

0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

Эта таблица для программера -- примерно то же,
что и таблица умножения для школьника, только ее запомнить проще,
поскольку она меньше.

Когда длина машинного слова делилась на 3, для тех же целей
использовалась восьмеричная система. Сейчас все кратно 8
(следовательно, 4) -> пользуются 16-системой,

Попробуй сообразить, что такое двоичная
1001 1010 0101 1101? Зная шестнадцатеричную систему, все тривиально:
9 A 5 D = 0x9A5D

А твоей нотации оно выглядело бы как
#define _1001101001011101 0x9A5D
И так 4 миллиарда раз...

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>0x0E = 0000 1110
следить на до за группой значений а не за одним, если не ясно.
b00011111, // если присмотреться то единицами нарисована буква Г

b00010000,
b00010000,
b00010000,
b00010000,
b00010000,
b00010000,

Spicinpv
() автор топика
Ответ на: комментарий от Spicinpv

Spicinpv (*) (05.10.2004 14:35:42)

> ...если присмотреться то единицами нарисована буква Г

А-а-а...

Ну да, еще можно компьютером гвозди заколачивать ;)

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Die-Hard.

Ну если нет в сях бинарного представления данных значит нет.
А по поводу как это обойти каждый вибирает сам
в уме считать или задать как ему кажеться удобно.

>Ну да, еще можно компьютером гвозди заколачивать ;)

И я пишу прогу не для компа а для контроллера там нету такого понятия как шрифт еще и кирилица, поэтому попрошу не глумиться.

Собственно из за этого и возникла такая трабла.

Spicinpv
() автор топика
Ответ на: комментарий от Spicinpv

Spicinpv(*) (06.10.2004 8:35:39):

> И я пишу прогу не для компа а для контроллера там нету такого понятия как шрифт еще и кирилица, поэтому попрошу не глумиться.

> Собственно из за этого и возникла такая трабла.

Все равно не понимаю причин подобного представления. Как ни напрягаюсь, не вижу.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.