Имя: Пароль:
1C
 
Как посчитать количество бит в байте?
, ,
0 vogenut
 
10.12.09
10:33
Есть число от 0 до 255. Соответственно влезает в один байт. Надо узнать сколько в нем выставлено битов. Мысли есть?
1 Гефест
 
10.12.09
10:34
8???
2 palpetrovich
 
10.12.09
10:34
8
3 Господин ПЖ
 
10.12.09
10:35
преобразовать в двоичное и посчитать "1"?
4 Salvador Limones
 
10.12.09
10:35
По високосным и до 9 доходит.
5 vogenut
 
10.12.09
10:35
(1) Да нет. Есть определенное значение байта, надо узнать сколько бит для данного байта установлено.
6 palpetrovich
 
10.12.09
10:36
(4) ну эт редко
7 vogenut
 
10.12.09
10:36
(3) А как в двоичное преобразовать?
8 palpetrovich
 
10.12.09
10:36
(5) задай вопрос по-другому
9 asp
 
10.12.09
10:37
(5) где установлено?
10 Гефест
 
10.12.09
10:37
телепатирую, что нужно посчитать количество одоек в строке типа "01100100"
11 vogenut
 
10.12.09
10:38
(8) Возьмем число 1. Это в двоичном представлении 1, т.е. выставлен один бит. Число 2 в двоичном представлении равно 10, тоже один бит выставленным получается.
12 Господин ПЖ
 
10.12.09
10:38
(7) функцией...
13 palpetrovich
 
10.12.09
10:38
дес - дв
0 - 00
1 - 01
2 - 10
3 - 11
4 - 100
...
14 Ненавижу 1С
 
гуру
10.12.09
10:38
(5) сколько единичных (ненулевых) бит в нем?
15 vogenut
 
10.12.09
10:39
(10) У меня на входе Число на входе, а не строка
16 vogenut
 
10.12.09
10:39
(14) Угу
17 vogenut
 
10.12.09
10:40
(12) Понятно ) Но мне алгоритм интересен
18 vogenut
 
10.12.09
10:41
Забыл сказать. Это должно работать быстро, т.к. такая функция будет вызываться очень много раз.
19 vogenut
 
10.12.09
10:43
Блин, почему в 1С нету битовых операций? (
20 shuhard
 
10.12.09
10:43
(18)  кури XOR  в Math

Перем Массив[256];

Функция Сдвиг(а,н,куда)
   Перем Ат;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Математика=Скрипт.Eval("Math");
   Если а=0 Тогда
       Возврат 0;
   Иначе
       Ат=Математика.pow(2,Цел(Лог(а)/Лог(2)))+1
   КонецЕсли;
   Если Ат<65535 Тогда
       Ат=65535;
   КонецЕсли;
   Если куда=1 Тогда
       Возврат а/Математика.pow(2,н);
   Иначе
       Возврат а*Математика.pow(2,н)%Ат;
   КонецЕсли;
КонецФункции

Функция Расчет(Знач НачСумма,Сп)
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="vbscript";
   Для к=1 По Сп.РазмерСписка() Цикл
       НачСумма=Массив[Скрипт.Eval("("+Сдвиг(НачСумма,8,1) +" AND 255) XOR "+Сдвиг(НачСумма,8,0)+" XOR "+Сдвиг(НачСумма,8,0)+" XOR "+Сп.ПолучитьЗначение(к))+1];
       НачСумма=Скрипт.Eval(НачСумма+" AND 65535");
   КонецЦикла;
   Возврат НачСумма;
КонецФункции
21 Snovy
 
10.12.09
10:43
Когда то на ВБ упаковывал 16 флажков в одно число. Все было настолько просто... помню, что в 7.7 такого функционала не было, в 8 тоже не нашли и забросили это дело. Упаковка через исключающее "или" и распаковка через "и" битовых операциях (или наоборот)
22 kitt
 
10.12.09
10:45
(17)
Функция ДесВДвоич(ТекЧисло)
  Если ТекЧисло = 0 Тогда
     Возврат "0";
  ИначеЕсли ТекЧисло = 1 Тогда
     Возврат "1";
  ИначеЕсли ТекЧисло = 2 Тогда
     Возврат "10";
  ИначеЕсли ТекЧисло = 3 Тогда
     Возврат "11";
     ...ну ты понел )... и так далее
  КонецЕсли;
КонецФункции
23 vogenut
 
10.12.09
10:45
(20) Не вкурил. И как мне получить число битов для моего числа?
24 vogenut
 
10.12.09
10:46
(22) Мне не десятичное представление нужно, а количество единичек в числе
25 Mikeware
 
10.12.09
10:46
Единиц=0;
Для сч=1 По 8 Цикл
Если Нечет(ВхЧисло)=1 Тогда
Единиц=Единиц+1;
КонецЕсли;
ВхЧисло=Цел(ВхЧисло/2);
КонецЦикла;
26 vogenut
 
10.12.09
10:47
(24) Не бинарное представление, хотел сказать
27 Mikeware
 
10.12.09
10:47
(20) yahoo.eu
28 vogenut
 
10.12.09
10:48
(25) Уже вариант. Но кажется, что будет медленно, функция сто тыщ миллионов будет вызываться.
29 БТР
 
10.12.09
10:49
Хрень какая то. Бит это не только 1 но и 0. Всегда 8 бит.
30 vde69
 
10.12.09
10:49
8 раз дели на 2 и при этом считай сумму остатка от деления
31 romix
 
10.12.09
10:50
В 1С есть оператор % который дает остаток (хвостик) от деления.
Делить на два таким способом 8 раз и выводить на экран хвостик - получится двоичное число (начиная с младшей цифры). Тут можно и единицы посчитать, и само двоичное число получить.
32 Ненавижу 1С
 
гуру
10.12.09
10:50
Единиц=0;
Пока ВчЧисло>0 Цикл
Ост = ВчЧисло % 2;
Единиц=Единиц+Ост;
ВхЧисло=(ВхЧисло-Ост)/2;
КонецЦикла;
33 Raybek
 
10.12.09
10:50
(28) Если нужно быстрее...
Если числа только с 0 до 255, то запомни где-нибудь табличку соответствия Число-Кол-во 1.
34 vogenut
 
10.12.09
10:51
(33) Отлично! То что доктор прописал! Спасибо! )
35 Raybek
 
10.12.09
10:52
То бишь у тебя получится таблица соответвия с колонками "Число" и "Количество единиц". Или еще лучше массив, где индекс элемента - это число, а значение массива - это кол-во единиц. Тогда тупо вызваешь Массив[15]:)
36 shuhard
 
10.12.09
10:53
(23) учи матчасть
37 vogenut
 
10.12.09
10:54
(35) Да, быстрее не придумаешь )
38 palpetrovich
 
10.12.09
10:54
(35) стопудов! а заполнять при начале работы с помощью (32)
39 БТР
 
10.12.09
10:54
(37) Открой военную тайну, зачем тебе это вообще надо?
40 Mikeware
 
10.12.09
10:56
(28)
мат=СоздатьОбъект("Математика");
Единиц=мат.bitand(арг,128)/128+мат.bitand(арг,64)/64+
мат.bitand(арг,32)/32+
мат.bitand(арг,16)/16+
мат.bitand(арг,8)/8+мат.bitand(арг,4)/4+мат.bitand(арг,2)/2+мат.bitand(арг,1);
41 Boroda
 
10.12.09
10:57
Вот, писал для семерки.
Как разложить в двоичный код:
Функция ВернутьДвКод(ч)
   х = Цел(ч/2);
   Если х>0 Тогда
       Возврат ВернутьДвКод(х)+Строка(ч-х*2);
   КонецЕсли;    
   Возврат Строка(ч-х*2);
КонецФункции    
//*******************************************

Процедура Сформировать()
  рез = ВернутьДвКод(ВыбЧисло);
  Сообщить(рез);
  Сообщить(Прав(Рез,1)) ;
КонецПроцедуры
42 vogenut
 
10.12.09
10:58
(39) Есть одна специфическая задачка...
43 Ненавижу 1С
 
гуру
10.12.09
11:00
(42) которую конечно надо решить на 1Це
44 vogenut
 
10.12.09
11:01
(43) Ну, разные проблемы бывают. Приходится решать. В УПП вон системы линейных уравнений решают и ничего...
45 Raybek
 
10.12.09
11:03
(42) Блин, заинтриговал, раздраконил любопытство ...и свалил:)
46 Ненавижу 1С
 
гуру
10.12.09
11:03
(44) СЛУ еще понять можно и то я бы само решение вынес бы во внешнюю компоненту. Мне понятно зачем решать СЛУ в УПП, зачем битовые операции в учетных задачах - непонятно
47 СоболиныйГлаз
 
10.12.09
11:04
Тупо делить число на 128, остаток от деления на 64 и т.д. Результаты(целые, ес-но) сложить.
48 БТР
 
10.12.09
11:08
От одинэсники ушлые какие. В какой программе то? В бухгалтерии? На каком счету байты учитываете? Или к торговле партионный и складской учет байт налаживаешь?
49 vde69
 
10.12.09
11:12
(48) например права хранятся в байте и при устаноке надо контролировать, что нельзя более 5 галок одновременно ставить...

а вообще битовые операции в 1с - это нонсенс, так как в 1с НЕТУ битового типа, как и вообще числовового то-же нету (в нормальном понимании)
50 vogenut
 
10.12.09
11:13
(45)(46)(48) Контроль четности например
51 Mikeware
 
10.12.09
11:15
(50) Для контроля четности достаточно контролировать один бит :-)
52 DUDE
 
10.12.09
11:17
(51) +1. Младший.
53 DUDE
 
10.12.09
11:18
Или последнюю цифру числа.
54 БТР
 
10.12.09
11:18
жеееесть...
(49) У тебя права в 1С в "байте" хранятся? Че курил то?
55 Mikeware
 
10.12.09
11:20
(54) ПОчему бы и нет?
У меня правила миграции документа в двух байтах :-))
56 Raybek
 
10.12.09
11:21
(50) Контроль четности чего? Числа с 0 до 255? Тогда, если последнее число 0 или четное - тогда число четное. Только вот опять для чего?:) Еще и сто миллионов раз будет проверяться четность? Колитесь короче:)
57 БТР
 
10.12.09
11:23
(55) Тоже занимался подсчетом еденичек в двоичном предсавлении байта?
58 Mikeware
 
10.12.09
11:24
(57) "В отличие от" - я сначала думаю, а потом делаю... :-)
59 Raybek
 
10.12.09
11:25
(50) Ааааа, какой-то алгоритм связанный с шифровкой-дешифровкой... криптографией занимаемся в 1С?:)
60 Mikeware
 
10.12.09
11:26
(59) Ну необязательно криптографией - может, контролем данных...
61 vde69
 
10.12.09
11:27
(54) я где-то говорил про права 1с??????

я говорил просто про ПРАВА, которые могуб быть например переданы в ХП совершенно другой учетной системы (например интернет магазина).

Я говорю, что ситуация возможна, но в рамках 1с абсурдна.

зы
всегда удивлялся как люди умеют искажать явно выраженое мнение...
62 vde69
 
10.12.09
11:30
(59) у меня например есть такой код в моей программе

           Знак = "";
           Пока Знак <> Неопределено Цикл
               Знак = Текст.Прочитать(1);
               Если Знак <> Неопределено Тогда
                   // декодируем символ
                   Если е = 36 Тогда
                       е = 1;
                   Иначе
                       е = е + 1;
                   КонецЕсли;
                   
                   ЗнакКлюча    = КодСимвола(ВолшебныйКлюч, е);
                   Знак        = КодСимвола(Знак);
                   // надо сделать следующую операцию
                   // Знак = Знак XOR ЗнакКлюча
                   РезЗнак = 0;
                   Для е1 = 1 по 8 Цикл
                       ИтоговыйБит = 1;
                       Маска=Pow(2, е1-1);
                       Бит1=Цел(Знак / Маска);
                       Бит2=Цел(ЗнакКлюча / Маска);
                       Если ((Бит1+Бит2)/2)=Окр((Бит1+Бит2)/2,0) Тогда
                           ИтоговыйБит = 0;
                       КонецЕсли;
                       РезЗнак = РезЗнак + Маска * ИтоговыйБит;
                   КонецЦикла;                
                   
                   // все, теперь добавим к уже расшифрованной строке
                   СтрокаФайла = СтрокаФайла + Символ(РезЗнак);                
               КонецЕсли;
           КонецЦикла;
63 БТР
 
10.12.09
11:31
(61) Да, лан, че ты завелся :-)
(0) Ну, давай, колись быстро, что ваяешь :-)))
64 devlabnn
 
10.12.09
11:37
(0)
КолБит = 0;
Пока Байт > 0 Цикл
   КолБит = КолБит + Байт % 2;
   Байт = Цел(Байт/2);
КонецЦИкла;

хе
65 vogenut
 
10.12.09
11:50
(64) Уже нашли самый простой и самый быстрый вариант )
66 vogenut
 
10.12.09
11:50
(63) Сие тайна есть великая )
67 vogenut
 
10.12.09
11:51
(59) Тепло... )
68 Cap_1977
 
10.12.09
11:53
(65) Пример приведи
69 fisher
 
10.12.09
11:54
(65) Ну а этим будешь инициализировать свою табличку.
70 vogenut
 
10.12.09
11:57
(68)

Перем БитыВБайте;

Функция КоличествоБит(Число)
 Возврат БитыВБайте[Число];
КонецФункции

БитыВБайте[0] = 0;
БитыВБайте[1] = 1;
БитыВБайте[2] = 1;
БитыВБайте[3] = 2;
...
БитыВБайте[255] = 8;
71 fisher
 
10.12.09
11:58
(64) Вариант в (32) симпатичней.
72 Cap_1977
 
10.12.09
12:00
(70) Жесть
73 vogenut
 
10.12.09
12:01
(72) То, что доктор прописал )
74 fisher
 
10.12.09
12:01
(72) Есть варианты быстрее?
75 vogenut
 
10.12.09
12:02
(74) И проще )))
76 supremum
 
10.12.09
12:02
(74) На ассемблере
77 БТР
 
10.12.09
12:03
Поставьте плиз категорию "Юмор" ветке.
78 vogenut
 
10.12.09
12:03
(76) Эта реализация похоже для любых языков самая быстрая
79 Cap_1977
 
10.12.09
12:03
(73) Идея праильная ))) Только массив инициализируй перед вызовом своего криптоапи
80 Cap_1977
 
10.12.09
12:04
(79) + в цикле
81 vogenut
 
10.12.09
12:05
(73) Массив при загрузке модуля будет инициализироваться
82 Cap_1977
 
10.12.09
12:05
(81) Т.е. ты всерьез будешь набивать 255 строк теста ? а если ошибешься где нить ?
83 supremum
 
10.12.09
12:07
(82) сгенерировать в екселе и поставить в 1с
84 supremum
 
10.12.09
12:08
(82) и не 255 строк, а 256 строк
85 Mikeware
 
10.12.09
12:09
(84) И на "0" - тоже? :-)
86 Мутабор
 
10.12.09
12:11
1 - 1 бит в конце
2 - 2 бит
4 - 3 бит
8 - 4 бит
16 - 5 бит
32 - 6 бит
64 - 7 бит
128 - 8 бит

разбивай число на составляющие..

>=128 - 8-й бит установлен
число-128>=64 7-й бит установлен
и т.д.
87 devlabnn
 
10.12.09
12:12
(86) что это?
88 hhhh
 
10.12.09
12:13
(86) тормозной вариант, уже ведь обсудили.
89 Мутабор
 
10.12.09
12:13
(87) Чило назови от 0 до 255
90 devlabnn
 
10.12.09
12:13
(89) 0
91 vde69
 
10.12.09
12:14
Самый быстрый будет вот этот вариант:

Результат = 0;

е = 0;
Пока е <= 8 Цикл
е = е + 1;
Если Значение > СписокЗначений[е] Тогда
 Результат = Результат+1;
 е = е + 1;
 если е>8 тогда прервать конецесли;
ИначеЕсли Значение > СписокЗначений[е] Тогда
 Результат = Результат+1;
 е = е + 1;
 если е>8 тогда прервать конецесли;
ИначеЕсли Значение > СписокЗначений[е] Тогда
 Результат = Результат+1;
 е = е + 1;
 если е>8 тогда прервать конецесли;
.......  
КонецЕсли;
КонецЦикла;


список имеет значения 128,64,32 ....

Операции сравнения всегда работают быстрее арифметических
92 Мутабор
 
10.12.09
12:15
>128 0
>64 0
>32 0
>16 0
>8 0
>4 0
>2 0
>1 0
93 vde69
 
10.12.09
12:16
(91)+ есть ошибка, но где-то в этом направлении
94 vogenut
 
10.12.09
12:16
(81) Один раз написать массив не проблема
95 fisher
 
10.12.09
12:18
(86), (91) - это нерабочие варианты
96 Мутабор
 
10.12.09
12:19
(95) ты проверь
97 Mikeware
 
10.12.09
12:19
(93) Самым быстрым будет
Если Арг=0 тогда 0 иначе БитВБайте[Арг]
98 vogenut
 
10.12.09
12:20
(91) Быстрее чем "Возврат БитыВБайте[Число]"? ;)
99 vde69
 
10.12.09
12:20
(95) Вот рабочий

Результат = 0;
е = 0;
Пока е <= 8 Цикл
е = е + 1;
Если Значение > СписокЗначений[е] Тогда
 Результат = Результат+1;
 Значение = Значение - СписокЗначений[е];
КонецЕсли;
КонецЦикла;
100 Мутабор
 
10.12.09
12:21
+(96) короче лень спорить, хошь проверяй, хошь нет.
101 vogenut
 
10.12.09
12:21
(97) А как оператор Если ускорит эту конструкцию?
102 Mikeware
 
10.12.09
12:24
(101) Он не ускорит. Он защитит от нулевого индекса
103 fisher
 
10.12.09
12:26
(100) Работать не будет.
"короче лень спорить, хошь проверяй, хошь нет" (с)
104 fisher
 
10.12.09
12:31
(99) Да. Такой, по идее, рабочий. Но тут уже есть арифметические операции :) Плюс алгоритм не универсальный. Короче, нечто среднее по производительности и универсальности получается.
105 vogenut
 
10.12.09
12:31
(102) Дык, у массива индексация с 0
106 Mikeware
 
10.12.09
12:35
(105) в 1c - с нуля? Не знал... ЖКК глянуть надо... Но ленб
107 vogenut
 
10.12.09
12:35
(77) А причем здесь "Юмор"? ) Тема то серьезная
108 vogenut
 
10.12.09
12:36
(106) Массив (Array) Возможно обращение к значению элемента посредством оператора [...]. В качестве аргумента передается индекс значения (нумерация с 0).
109 Ваше благородие
 
10.12.09
12:36
В одном байте восемь бит.
110 vogenut
 
10.12.09
12:37
(109) Спасибо за информацию! ))
111 Mikeware
 
10.12.09
12:37
(109) А восемь ваххабитов - это один ваххабайт...
1 терапевт - 1024 гигапевта...
112 fisher
 
10.12.09
12:38
Мне, я уже говорил, больше всего алгоритм из (32) импонирует. Простой, работает для любого числа, время выполнения пропорционально величине числа. Время выполнения практически не медленнее остальных вариантов (у 1С разницы по времени между элементарными операциями почти нет - её съедают накладные расходы интерпретации). Если время критично - тогда уже табличка. Компромиссы бессмысленны.
113 vogenut
 
10.12.09
12:38
В общем, даже такой высокоуровневый язык как 1С не помеха для работы с чем угодно и к тому же с приемлемой производительностью. Все дело в голове )
114 pectopatop
 
10.12.09
12:48
(113) ASM по-любэ быстрее будет. Хотя бы потому что компилятор
115 pectopatop
 
10.12.09
12:50
А извращятся конечно по-разному можно
116 supremum
 
10.12.09
12:52
+(114) ну и естественней делать по циклу, правый или левый сдвиг через флаг переноса, или через массив, но сказать что будет быстрее сможет только замер, причем на разных процессорах будет по разному
117 fisher
 
10.12.09
12:57
(116) Ты что? Через массив без вариантов быстрее. На каких процессорах не сравнивай.
118 supremum
 
10.12.09
13:06
(117) спекулятивное выполнение может проканать и будет быстрее, а с доступом в массив возникнут сложности: будет ли он в кеше ну и т. д.
119 vogenut
 
10.12.09
13:08
(113) Никто и не спорит. Но за глаза хватит и реализации на 1С
120 5 Элемент
 
10.12.09
13:10
Ужас
121 vogenut
 
10.12.09
13:13
(118) Ну такие функции используются обычно в циклах да еще к тому же в совокупности с другими вычислениями. Так что кеш будет валиден после первой итерации и эффект от спекуляции доступа к памяти с остальными операциями в совокупности выше чем сдвиг по циклу, даже развернутый.
122 supremum
 
10.12.09
13:16
(121) Сложно скзать нужно мерить. Наверное тут все таки может быть пороговое значение от количества вызовов подсчета битов, когда будет быстрее тот или другой вариант. Но без замеров сказать сложно.
123 Tashiro
 
10.12.09
13:22
СтрЧислоВхождений(Строка(Число), "1") не?
124 supremum
 
10.12.09
13:26
(123) Не! :)
125 Tashiro
 
10.12.09
13:32
(124) а в чем сакральность сделать это именно с числом? )
126 supremum
 
10.12.09
13:40
Сколько установленных битов в числе "112"? 2? На самом деле 3.
127 GedKo
 
10.12.09
13:42
(126) не факт =)
128 ado
 
10.12.09
13:49
(17) Мда ... а в школе на информатике теперь ворд изучают ...
129 vogenut
 
10.12.09
14:16
(128) Мне нужен очень быстрый алгоритм. В школе такому не учат )
130 Мутабор
 
10.12.09
15:11
(103) Как же меня задолбали такие умники:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Перем Временно, Результат, Бит;
   Бит = 128;
   Результат = "";
   
   Временно = Десятичное;
   Пока Бит >= 1 Цикл
       Если Временно >= Бит Тогда
           Результат = Результат + "1";
           Временно = Временно - Бит;
       Иначе
           Результат = Результат + "0";
       КонецЕсли;
       Бит = Бит / 2;
   КонецЦикла;
   Сообщить(Результат);
КонецПроцедуры
131 Мутабор
 
10.12.09
15:19
Ну где этот умник фишер?
132 НЕА123
 
10.12.09
15:21
(0)
учат в школе так

Ч%2+
Цел(Ч/2)%2+
Цел(Ч/4)%2+
Цел(Ч/8)%2+
Цел(Ч/16)%2+
Цел(Ч/32)%2+
Цел(Ч/64)%2+
Цел(Ч/128)
133 НЕА123
 
10.12.09
15:23
+(132)
но (130) красивше.
134 Эстет хренов
 
10.12.09
15:30
Что бы быстро считало нужно все циклы развернуть и сделать кейс из 256 случаев
135 НЕА123
 
10.12.09
15:35
(134)
ну уж лучше без кейса.
в массив или лучше в соответствие засунуть.
136 vogenut
 
10.12.09
16:13
(135) Хм, лучше в соответствие чем в массив? Поиск O(log N) лучше чем O(1)?
137 НЕА123
 
10.12.09
16:38
(136)
наверное, да, для фиксированного массива O(1) (что-забыл про него).
для обычного - сильно сомневаюсь, скорее всего O(N).
138 vogenut
 
10.12.09
16:55
(137) С чего это вдруг для обычного O(n), если доступ по индексу?
139 fisher
 
10.12.09
17:13
(131) Виноват. Невнимательно читал. Решил, что твоё предложение идентично (91), а там вычитания не было.
140 fisher
 
10.12.09
17:17
(132) Вариант в (32) отработает быстрее для небольших чисел плюс он более универсален.
141 Torquader
 
10.12.09
21:44
(132)
К сожалению, в 1С нет оператора целочисленного деления, поэтому, если мы выполняем деление - то переходим в дробные числа, которые нужно округлять.
Понятно, что в Visual Basic мы радостно пишем Число\2 и не имеем проблем с потерей производительности.
(137) Поиск по массиву из 256 элементов, это одна индексная операция сложения адреса поэтому О(1).

Однако, если число больше одного байта, то уже начинаются сложности, так как для двух байтов массив уже съест достаточно памяти (65536*4+21).
142 Мутабор
 
11.12.09
06:31
Исправил чуток:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Перем Временно, Результат, Бит;
   
   Временно = Десятичное;
   Результат = "";
   
   Бит = 1;
   Пока Бит * 2 <= Временно Цикл
       Бит = Бит * 2;
   КонецЦикла;
   
   Пока Бит >= 1 Цикл
       Если Временно >= Бит Тогда
           Результат = Результат + "1";
           Временно = Временно - Бит;
       Иначе
           Результат = Результат + "0";
       КонецЕсли;
       Бит = Бит / 2;
   КонецЦикла;
   
   Пока СтрДлина(Результат) / 8 <> Цел(СтрДлина(Результат) / 8) Цикл
       результат = "0" + Результат;
   КонецЦикла;
   
   Сообщить(Результат);
КонецПроцедуры
143 supremum
 
11.12.09
07:55
(141) или две индексные операции плюс одна сложения :) (для двух байт)
144 Kraft
 
11.12.09
08:21
(0) и давно ты программист?
145 Kraft
 
11.12.09
08:21
вернее так:

и давно ты "программист"?
146 НЕА123
 
11.12.09
08:56
(138) (141)
потому что физически массив в 1С - это, скорее всего, список. т.к.
трудно представить метод Добавить() у классического массива.
147 vogenut
 
11.12.09
09:02
(144) 20 лет где-то
148 vogenut
 
11.12.09
09:03
(146) Фи, практически любая реализация классического массива в любом языке имеет метод Добавить. Например STL vectort
149 НЕА123
 
11.12.09
09:06
насчет массива

Массив256 = Новый Массив;
Массив256.Добавить(0);

Пока Массив256.Количество() < 256 Цикл
   Для к = 0 по Массив256.Вграница() Цикл
            Массив256.Добавить(1 + Массив256[к]);  
   КонецЦикла;
КонецЦикла;
150 НЕА123
 
11.12.09
09:07
(148)
да.
но это уже не O(1).
151 vogenut
 
11.12.09
09:08
(148) Так речь не про сложность Добавить, а про сложность []
152 НЕА123
 
11.12.09
09:09
(148)
насчет любого языка - неправда.
153 vogenut
 
11.12.09
09:10
(152) В тех, которые я знаю, правда )
154 НЕА123
 
11.12.09
09:13
(151)
когда  объявляется массив - выделяется память размером N*L, где
N - колво элементов, L - размер элемента.
при обращении по индексу - да O(1).
но как в этот массив можно Добавить()?
так что в 1С это список, может и индексирован(что сомнительно)
.
про фиксированный массив не знаю.
155 НЕА123
 
11.12.09
09:15
(153)
понятно.
ассемблеров, алголов, фортранов, паскалей, С не признаешь.
156 vogenut
 
11.12.09
09:16
(154)
- В любом объектно (ориентированном) языке есть классы, которые реализуют понятие массива, а в структурных соответвующее API, с методом Добавить. От фиксированого массива толку мало в общеприкладной разработке
- В 1С это элементарно проверить, достаточно сравнить скорость [] массива и структуры, например )
157 Mikeware
 
11.12.09
09:18
(156) Бедняга...
158 vogenut
 
11.12.09
09:18
(155) Нет, просто в этих языках пользуют библиотеки функций для работы с контейнерами. В принципе это ничем не отличается от объектов, кроме как видом.
159 vogenut
 
11.12.09
09:18
(157) А кому сейчас легко )
160 НЕА123
 
11.12.09
09:21
(156)
на ТЗ, проверял на 77.  O(N).
161 vogenut
 
11.12.09
09:22
(160) ТЗ это вещь достаточно сложная. Как минимум это двумерный массив. Но с учетом поддержки индексов, столбцов и прочего, внутренняя структура скорее всего достаточно сложна.
162 НЕА123
 
11.12.09
09:50
(161)
да.
но классический двумерный массив = O(1).
163 vogenut
 
11.12.09
09:59
(162) Но ТЗ это не классический двумерный массив )
164 НЕА123
 
11.12.09
10:01
(163)
да.
как и массив.
165 vogenut
 
11.12.09
10:06
(164) Массив простой как дырка от бублика. А ТЗ более продвинутая вещь. Да и опыты   показывают, что у массива операция [] имеет сложность О(1).
Ошибка? Это не ошибка, это системная функция.