Имя: Пароль:
1C
 
OR, AND, NOT, XOR
0 о_о
 
21.10.04
09:02
OR, AND, NOT, XOR  есть ли в 1С ? А то как-то всю ЖККу просмотрел - не увидел. И в помошнике синтаксическом нет ничего. 1с - 7.7
1 Фокусник
 
21.10.04
09:04
ИЛИ, И, НЕ устроят ?
2 о_о
 
21.10.04
09:06
Забыл указать что интересуют битовые операции. А попутно сдвиги циклические еще нужно.
3 Rovan
 
гуру
21.10.04
09:11
Нафига в 1С битовые операции ? (нет их там да и не было никогда)
4 о_о
 
21.10.04
09:13
Ну отрицательный результат - тоже результат.
5 427
 
21.10.04
09:20
круто...
6 ВторНик
 
21.10.04
09:31
2(5)Вместо "КРУТО" могу предложить другое слово
7 Антон ORIGINAL
 
21.10.04
09:52
Зато в программе 1С есть команда "Если".
Я предлагаю программистам фирмы 1С доплнить эту каманду довеском "бы".
Тогда можно будет строить конструкции Если бы "$" - Тогда "Канары" - Иначе "#
8 Оборотень
 
21.10.04
10:11
Нда ... получается только ручками писать :(
9 Rovan
 
гуру
21.10.04
10:17
Мои любимые функции в 1С
РассчитатьРегистрыНА
ВывестиПредупреждениеНА (Сообщить или Предупреждение)
10 о_о
 
23.10.04
21:11
Вот если кому интересно.

var pow2[33];
var pow8[12];
var pow16[9];
var convertString;

procedure make_pow()
   pow2[1]=1;
   pow8[1]=1;
   pow16[1]=1;
   for i=1 to 32 do
       pow2[i+1]=2*pow2[i];
   enddo;
   for i=1 to 11 do
       pow8[i+1]=8*pow8[i];
   enddo;
   for i=1 to 8 do
       pow16[i+1]=16*pow16[i];
   enddo;
endprocedure

function bnot(х)
   return pow2[33]-1-х;
endfunction

function shl(x)
   return x*2;
endfunction


function shlc(x)
   return (x%pow2[32])*2+int(x/pow2[32]);
endfunction

function shrc(x)
   return int(x/2)+(x%2)*pow2[32];
endfunction


function shr(x)
   return int(x/2);
endfunction

function pow(i,source)
   if source = 2 then
       return pow2[i];
   elsif source = 8 then
       return pow8[i];
   elsif source = 16 then
       return pow16[i];
   endif;
endfunction

function convertTo10(x,source)
   var y,_x;
   if source=10 then
       return x;
   endif;
   y=0;                
   if source=2 then
       _x=right("00000000000000000000000000000000"+UPPER(x),32);
       _to = 32;
   elsif source=8 then
       _x=right("00000000000000"+UPPER(x),11);
       _to = 11;
   elsif source=16 then
       _x=right("00000000"+UPPER(x),8);
       _to = 8;
   endif;  
   y=0;
   for i=0 to _to-1 do
       y=y+pow(i+1,source)*number(find(convertString,mid(_x,_to-i,1))-1);
   enddo;
   return y;  
endfunction

function convertFrom10(x,dest)
   var _to,del;
   _to = 32/?(dest = 2,1,?(dest=8,3,4));
   del = x;
   _y="";
   y="";
   for i=1 to _to do
       _y=_y+mid(convertString,(del % dest)+1,1);
       del = int (del/dest);
   enddo;
   for i=0 to _to-1 do
       y=y+mid(_y,_to-i,1);
   enddo;
   return y;
endfunction

function convertNumber(x,source,dest)
   return convertFrom10(convertTo10(x,source),dest);
endfunction
 
function getBit(x,N)
   return (int(x/pow2[N])%2);
endfunction

function bor(x,y)
   var z;
   z = 0;
   for i = 1 to 32 do
       z=z+pow2[i]*(?(getBit(x,i)+getBit(y,i)<1,0,1));
   enddo;
   return z;
endfunction

function band(x,y)
   var z;
   z = 0;
   for i = 1 to 32 do
       z=z+pow2[i]*getBit(x,i)*getBit(y,i);
   enddo;
   return z;
endfunction

function bxor(x,y)
   return bor(band(bnot(x),y),band(x,bnot(y)));
endfunction

перед началом работы проинициализировать массивы pow. Исходим из предположения что работаем с 32 битами. Иначе надо менять вхождения 32 и порожденых границ
для расчета MD5 не тянет. Но по при не очень активном использовании терпимо
11 о_о
 
23.10.04
21:12
Забыл указать -  
convertString = "0123456789ABCDEF";
12 Кортес
 
23.10.04
21:39
Программирование ради программирования?
13 о_о
 
23.10.04
21:58
Да нет. Есть вполне реальное применение при нахождении общего наименьшего предшественника для N строк.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.