Обсуждение:Как в RSL можно выполнить побитовые операции

0 (0)
  • Развернуть Обсуждение:Как в RSL можно выполнить побитовые операции ( Обсуждение примера  14.11.2006 20:43 )
    2(2)
    При решении некоторых задач можно столкнуться с необходимостью битовых операций. К примеру - программировании контрольно-кассовых машин в среде РСЛ через порт или предоставленны API, математических задачах, при которых преобразование числе быстрее будет сделать побитовыми сдвигами. Вот пример, как можно воспользоваться функциональностью WindowsScriptHost

    Посмотреть пример
    >> Ответить
    • Развернуть А зечем? ( Дмтрий Nartub  28.06.2007 11:42 )
      0(0)
      Кажется, быстрее будет работать длм-ка
      я, например, давно создал библиотечку логических побитовых функций (установка битов,получение бита по номеру и т.п.)
      Например bGetBit(целое число, номер бита):
      #include "rsl\rsldll.h"
      static void DLMAPIC bGetBit (void)
      {
        unsigned a,b,c;
        VALUE *val;
        GetParm (0,&val);
        if (val->v_type == V_INTEGER) a=(unsigned)val->value.intval;
        GetParm (1,&val);
        if (val->v_type == V_INTEGER) b=(unsigned)val->value.intval;
        c=(a & (1 << b))>>b;
        ReturnVal (V_INTEGER,&c);
      }
      void DLMAPI EXP AddModuleObjects (void)
      {
      AddStdProc (V_INTEGER, "bGetBit", bGetBit, 0);
      }
      
      Компилируем с помощью DLM SDK, подключаем в макросе, и работаем
      >> Ответить
    • Развернуть А зачем? ( Дмтрий Nartub  28.06.2007 11:42 )
      0(0)
      Кажется, быстрее будет работать длм-ка
      я, например, давно создал библиотечку логических побитовых функций (установка битов,получение бита по номеру и т.п.)
      Например bGetBit(целое число, номер бита):
      #include "rsl\rsldll.h"
      static void DLMAPIC bGetBit (void)
      {
        unsigned a,b,c;
        VALUE *val;
        GetParm (0,&val);
        if (val->v_type == V_INTEGER) a=(unsigned)val->value.intval;
        GetParm (1,&val);
        if (val->v_type == V_INTEGER) b=(unsigned)val->value.intval;
        c=(a & (1 << b))>>b;
        ReturnVal (V_INTEGER,&c);
      }
      void DLMAPI EXP AddModuleObjects (void)
      {
      AddStdProc (V_INTEGER, "bGetBit", bGetBit, 0);
      }
      
      Компилируем с помощью DLM SDK, подключаем в макросе, и работаем
      >> Ответить