Как посчитать количество бит в байте? #449134


#0 by vogenut
Есть число от 0 до 255. Соответственно влезает в один байт. Надо узнать сколько в нем выставлено битов. Мысли есть?
#0 by vogenut
Есть число от 0 до 255. Соответственно влезает в один байт. Надо узнать сколько в нем выставлено битов. Мысли есть?
#1 by Гефест
8???
#2 by palpetrovich
8
#3 by Господин ПЖ
преобразовать в двоичное и посчитать "1"?
#4 by Salvador Limones
По високосным и до 9 доходит.
#5 by vogenut
Да нет. Есть определенное значение байта, надо узнать сколько бит для данного байта установлено.
#6 by palpetrovich
ну эт редко
#7 by vogenut
А как в двоичное преобразовать?
#8 by palpetrovich
задай вопрос по-другому
#9 by asp
где установлено?
#10 by Гефест
телепатирую, что нужно посчитать количество одоек в строке типа "01100100"
#11 by vogenut
Возьмем число 1. Это в двоичном представлении 1, т.е. выставлен один бит. Число 2 в двоичном представлении равно 10, тоже один бит выставленным получается.
#12 by Господин ПЖ
функцией...
#13 by palpetrovich
4 - 100 ...
#14 by Ненавижу 1С
сколько единичных (ненулевых) бит в нем?
#15 by vogenut
У меня на входе Число на входе, а не строка
#16 by vogenut
Угу
#17 by vogenut
Понятно ) Но мне алгоритм интересен
#18 by vogenut
Забыл сказать. Это должно работать быстро, т.к. такая функция будет вызываться очень много раз.
#19 by vogenut
Блин, почему в 1С нету битовых операций? (
#20 by shuhard
кури XOR  в Math Функция Расчет(Знач НачСумма,Сп)
#21 by Snovy
Когда то на ВБ упаковывал 16 флажков в одно число. Все было настолько просто... помню, что в 7.7 такого функционала не было, в 8 тоже не нашли и забросили это дело. Упаковка через исключающее "или" и распаковка через "и" битовых операциях (или наоборот)
#22 by kitt
КонецФункции
#23 by vogenut
Не вкурил. И как мне получить число битов для моего числа?
#24 by vogenut
Мне не десятичное представление нужно, а количество единичек в числе
#25 by Mikeware
#26 by vogenut
Не бинарное представление, хотел сказать
#27 by Mikeware
yahoo.eu
#28 by vogenut
Уже вариант. Но кажется, что будет медленно, функция сто тыщ миллионов будет вызываться.
#29 by БТР
Хрень какая то. Бит это не только 1 но и 0. Всегда 8 бит.
#30 by vde69
8 раз дели на 2 и при этом считай сумму остатка от деления
#31 by romix
В 1С есть оператор % который дает остаток (хвостик) от деления. Делить на два таким способом 8 раз и выводить на экран хвостик - получится двоичное число (начиная с младшей цифры). Тут можно и единицы посчитать, и само двоичное число получить.
#32 by Ненавижу 1С
#33 by Raybek
Если нужно быстрее... Если числа только с 0 до 255, то запомни где-нибудь табличку соответствия Число-Кол-во 1.
#34 by vogenut
Отлично! То что доктор прописал! Спасибо! )
#35 by Raybek
То бишь у тебя получится таблица соответвия с колонками "Число" и "Количество единиц". Или еще лучше массив, где индекс элемента - это число, а значение массива - это кол-во единиц. Тогда тупо вызваешь Массив[15]:)
#36 by shuhard
учи матчасть
#37 by vogenut
Да, быстрее не придумаешь )
#38 by palpetrovich
стопудов! а заполнять при начале работы с помощью
#39 by БТР
Открой военную тайну, зачем тебе это вообще надо?
#40 by Mikeware
мат=СоздатьОбъект("Математика"); Единиц=мат.bitand(арг,128)/128+мат.bitand(арг,64)/64+ мат.bitand(арг,32)/32+ мат.bitand(арг,16)/16+ мат.bitand(арг,8)/8+мат.bitand(арг,4)/4+мат.bitand(арг,2)/2+мат.bitand(арг,1);
#41 by Boroda
Вот, писал для семерки. Как разложить в двоичный код:
#42 by vogenut
Есть одна специфическая задачка...
#43 by Ненавижу 1С
которую конечно надо решить на 1Це
#44 by vogenut
Ну, разные проблемы бывают. Приходится решать. В УПП вон системы линейных уравнений решают и ничего...
#45 by Raybek
Блин, заинтриговал, раздраконил любопытство ...и свалил:)
#46 by Ненавижу 1С
СЛУ еще понять можно и то я бы само решение вынес бы во внешнюю компоненту. Мне понятно зачем решать СЛУ в УПП, зачем битовые операции в учетных задачах - непонятно
#47 by СоболиныйГлаз
Тупо делить число на 128, остаток от деления на 64 и т.д. Результаты(целые, ес-но) сложить.
#48 by БТР
От одинэсники ушлые какие. В какой программе то? В бухгалтерии? На каком счету байты учитываете? Или к торговле партионный и складской учет байт налаживаешь?
#49 by vde69
например права хранятся в байте и при устаноке надо контролировать, что нельзя более 5 галок одновременно ставить... а вообще битовые операции в 1с - это нонсенс, так как в 1с НЕТУ битового типа, как и вообще числовового то-же нету (в нормальном понимании)
#50 by vogenut
Контроль четности например
#51 by Mikeware
Для контроля четности достаточно контролировать один бит :-)
#52 by DUDE
+1. Младший.
#53 by DUDE
Или последнюю цифру числа.
#54 by БТР
жеееесть... У тебя права в 1С в "байте" хранятся? Че курил то?
#55 by Mikeware
ПОчему бы и нет? У меня правила миграции документа в двух байтах :-))
#56 by Raybek
Контроль четности чего? Числа с 0 до 255? Тогда, если последнее число 0 или четное - тогда число четное. Только вот опять для чего?:) Еще и сто миллионов раз будет проверяться четность? Колитесь короче:)
#57 by БТР
Тоже занимался подсчетом еденичек в двоичном предсавлении байта?
#58 by Mikeware
"В отличие от" - я сначала думаю, а потом делаю... :-)
#59 by Raybek
Ааааа, какой-то алгоритм связанный с шифровкой-дешифровкой... криптографией занимаемся в 1С?:)
#60 by Mikeware
Ну необязательно криптографией - может, контролем данных...
#61 by vde69
я где-то говорил про права 1с?????? я говорил просто про ПРАВА, которые могуб быть например переданы в ХП совершенно другой учетной системы (например интернет магазина). Я говорю, что ситуация возможна, но в рамках 1с абсурдна. зы всегда удивлялся как люди умеют искажать явно выраженое мнение...
#62 by vde69
у меня например есть такой код в моей программе
#63 by БТР
Да, лан, че ты завелся :-) Ну, давай, колись быстро, что ваяешь :-)))
#64 by devlabnn
хе
#65 by vogenut
Уже нашли самый простой и самый быстрый вариант )
#66 by vogenut
Сие тайна есть великая )
#67 by vogenut
Тепло... )
#68 by Cap_1977
Пример приведи
#69 by fisher
Ну а этим будешь инициализировать свою табличку.
#70 by vogenut
#71 by fisher
Вариант в симпатичней.
#72 by Cap_1977
Жесть
#73 by vogenut
То, что доктор прописал )
#74 by fisher
Есть варианты быстрее?
#75 by vogenut
И проще )))
#76 by supremum
На ассемблере
#77 by БТР
Поставьте плиз категорию "Юмор" ветке.
#78 by vogenut
Эта реализация похоже для любых языков самая быстрая
#79 by Cap_1977
Идея праильная ))) Только массив инициализируй перед вызовом своего криптоапи
#80 by Cap_1977
+ в цикле
#81 by vogenut
Массив при загрузке модуля будет инициализироваться
#82 by Cap_1977
Т.е. ты всерьез будешь набивать 255 строк теста ? а если ошибешься где нить ?
#83 by supremum
сгенерировать в екселе и поставить в 1с
#84 by supremum
и не 255 строк, а 256 строк
#85 by Mikeware
И на "0" - тоже? :-)
#86 by Мутабор
1 - 1 бит в конце 2 - 2 бит разбивай число на составляющие.. >=128 - 8-й бит установлен число-128>=64 7-й бит установлен и т.д.
#87 by devlabnn
что это?
#88 by hhhh
тормозной вариант, уже ведь обсудили.
#89 by Мутабор
Чило назови от 0 до 255
#90 by devlabnn
0
#91 by vde69
Самый быстрый будет вот этот вариант: .......   список имеет значения 128,64,32 .... Операции сравнения всегда работают быстрее арифметических
#92 by Мутабор
#93 by vde69
+ есть ошибка, но где-то в этом направлении
#94 by vogenut
Один раз написать массив не проблема
#95 by fisher
, - это нерабочие варианты
#96 by Мутабор
ты проверь
#97 by Mikeware
Самым быстрым будет Если Арг=0 тогда 0 иначе БитВБайте[Арг]
#98 by vogenut
Быстрее чем "Возврат БитыВБайте[Число]"? ;)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С