Имя: Пароль:
1C
 
Нужно из целого числа выделить флаги.
, ,
0 Олеся999
 
13.10.15
08:03
Помогите пожалуйста. Может кто сталкивался?
Нужно из целого числа выделить флаги.
Суть процедуры, надо разложить число на биты и потом смотреть в каком бите 1, это означает что у прибора есть что-то ... что определим потом в
Если тогда ...
Нужно что то вроде ... подсовываешь число в функцию, а она тебе возвращает массив битов.
1 DDwe
 
13.10.15
08:04
(0) А 1С умеет работать с битами?
2 Горогуля
 
13.10.15
08:05
ч%2 - первый бит, (ч-(ч%2))%4 - второй бит
3 cw014
 
13.10.15
08:05
4 cw014
 
13.10.15
08:06
Олеся999, тебе бы не 1С программировать с такой то внешностью... :-*
5 Горогуля
 
13.10.15
08:08
(2) ((ч-(ч%2))%4)/2. ну плюс-минус
6 Олеся999
 
13.10.15
08:08
(3) Хах да уж )

Там суть функции, сравниваем со степенью 2, если число больше, то вычитаем и т.д. пока не станет 0.
Суть что надо начинать вычитать с большей возможной степени 2
и потом проверять хватает остатка на след. меньшую на 1 степень, если нет ещё уменьшаем степень ...
7 Горогуля
 
13.10.15
08:08
(6) сама всё знаешь
8 Trotter
 
13.10.15
08:12
Что такая девушка делает в 1С ? Да ещё и пробует судя по всему работать с оборудованием. Вам эту задачу для чего нужно - то ? всё оборудование работает через драйвера. Надо просто поработать с драйвером.
9 Горогуля
 
13.10.15
08:13
(8) бородатого мужика охмуряет
10 Trotter
 
13.10.15
08:14
(9) "у прибора есть что-то " - что за прибор - то такой ?
11 Олеся999
 
13.10.15
08:15
(8)
По этому числу надо определять какие входы у прибора.
12 vde69
 
13.10.15
08:17
(9) зачем меня в суе вспоминать, бородатый и вроде муж :)
13 Олеся999
 
13.10.15
08:22
2 в стенени 0 = 1
2 в стенени 1 = 2
2 в стенени 2 = 4

3начит если  число 5, то это
2 в стенени 0 = 1 и (прибавить)
2 в стенени 2 = 4
т.е. первый бит и третий
15 vde69
 
13.10.15
08:24
примерно так:

мЧисло = ТвоеЧисло % 256;

Бит8 = (мЧисло - (мЧисло % 128)) > 0
мЧисло = мЧисло % 128;

Бит7 = (мЧисло - (мЧисло % 64)) > 0
мЧисло = мЧисло % 64;

Бит6 = (мЧисло - (мЧисло % 32)) > 0
мЧисло = мЧисло % 32;
16 Горогуля
 
13.10.15
08:24
во, больше нуля ;)
17 kosts
 
13.10.15
08:32
Что-то в этом роде

Функция Выделить_флаги(ЦелоеЧисло)
    Если ЦелоеЧисло = 0 Тогда
        Мас = Новый Массив;
        Возврат Мас;
    Иначе
        Мас = Выделить_флаги(Цел(ЦелоеЧисло / 2));
        Мас.Добавить(ЦелоеЧисло % 2);
        Возврат Мас;
    КонецЕсли;
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
    ЦелоеЧисло = 324578723845;
    Мас = Выделить_флаги(ЦелоеЧисло);
    с = "";
    Для каждого ф Из Мас Цикл
        с = с + ф;
    КонецЦикла;
    Сообщить(ЦелоеЧисло);
    Сообщить(с);
КонецПроцедуры




324 578 723 845
100101110010010011001100100100000000101


Если биты нужны в обратном порядке, то вместо добавить в массив можно сделать вставить.
18 Олеся999
 
13.10.15
09:03
(17) Спасибо сейчас потестю
19 Serg_1960
 
13.10.15
09:08
(17) Массив то зачем в функции? Сразу в символы в строку и постобработка лишняя.
20 kosts
 
13.10.15
09:13
(19) массив просили
21 Бертыш
 
13.10.15
09:21
(4) В Казахстане то среди казахов?
22 Serg_1960
 
13.10.15
09:40
(20) Sorry, был не прав :)

Функция ДвоичноеЧисло(Х)
    Возврат ?(Х<2,""+Х,ДвоичноеЧисло(Цел(Х/2))+?(Х%2,"1","0"));
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Сообщить(ДвоичноеЧисло(324578723845));
    Возврат;
КонецПроцедуры