
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.26] |
![]() |
|
Сообщ.
#1
,
|
|
|
"Напишите функцию для вычисления количества единиц в двоичном представлении переменной типа Word"
Меня интересует: 1) что это за переменные такие - word? 2) как представить в двоичном виде? 3) как подсчитать количество единиц? Т.е. по сути решить всю задачу не знаю как... Если бы была переменная типа string - я бы подсчитал кол-во единиц, а вот как быть с этой задачей?.. |
![]() |
Сообщ.
#2
,
|
|
Word - 2 байта, диапазон 0 - 65535.
Если число сразу в двоичном виде, то проще всего будет Val'ом перевести в строку и посчитать единицы. |
![]() |
Сообщ.
#3
,
|
|
А что, такой вариант не подходит уже:
![]() ![]() while X > 0 do begin inc(count, byte((X and $0001) > 0)); X := X shr 1; end; В памяти-то число всегда хранится в двоичном виде... Snow-ball, кстати, название темы поменяй, ибо Цитата Правила Раздела @ Название темы должно быть информативным ! |
![]() |
Сообщ.
#4
,
|
|
Я вот так накидал на Pascal’е:
![]() ![]() Procedure DecTo2(Value:integer;var Result:String); var o,v:integer; begin v:=value; o:=v mod 2; if o=0 then insert('0',result,0); if o=1 then insert('1',result,0); v:=v div 2; if v>=2 then DecTo2(V,Result) else insert('1',result,0); end; |
Сообщ.
#5
,
|
|
|
Цитата Profi @ ... - переводит десятичное число в двоичное в виде строки. Нет. Переводит двоичное число из внутреннего представления в строку. |
![]() |
Сообщ.
#6
,
|
|
Цитата nvm @ Нет. Переводит двоичное число из внутреннего представления в строку. Я вообще-то делал как на парах по дискретной математике. Там мы точно переводили десятичные в двоичные. |
Сообщ.
#7
,
|
|
|
Profi, Спасибо!
Добавлено ![]() ![]() while X > 0 do begin inc(count, byte((X and $0001) > 0)); X := X shr 1; end; что за действие shr? |
![]() |
Сообщ.
#8
,
|
|
Цитата Snow-ball @ что за действие shr? Сдвиг вправо на определенное количество бит... Пример: До сдвига: X = 10011101 Делаем сдвиг: X := X shr 2; После сдвига: X = 00100111 (младшие биты 01 вышли за пределы разрядной сетки, 2 старших бита заполнились нулями) |
Сообщ.
#9
,
|
|
|
Цитата Profi @ Цитата nvm @ Нет. Переводит двоичное число из внутреннего представления в строку. Я вообще-то делал как на парах по дискретной математике. Там мы точно переводили десятичные в двоичные. Ты производишь вычисления в десятичной системе, а компьютер в двоичной - десятичные числа он может хранить только в виде строк. |
Сообщ.
#10
,
|
|
|
![]() ![]() while x<>0 do begin x:=x and(x-1); inc(result); end; |
![]() |
Сообщ.
#11
,
|
|
Цитата nvm @ Ты производишь вычисления в десятичной системе, а компьютер в двоичной - десятичные числа он может хранить только в виде строк. А, Вы в этом смысле, просто не понял сначала. |