ГЛАВА 13 - Вспомогательные процедуры и функции

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

ABS (абсолютное значение)



      ABS(выражение)

выражение Константа, переменная или выражение.

Функция ABS возвращает абсолютное значение ВЫРАЖЕНИЯ. Абсолютное значение всегда положительно (или ноль).

Возвращаемый тип данных: REAL

Пример:


    C = ABS(A - B)  !C - абсолютное значение разницы между A и B

    IF B < 0 THEN B = ABS(B).  !Если B отрицательно, то сменить

   			   ! его знак

INRANGE (попадает ли число в заданный диапазон)



      INRANGE(выражение,нижний_предел,верхний_предел)

выражение Числовая константа, переменная или выражение.
нижний_предел Числовая константа, переменная или выражение задающее нижнюю границу диапазона.
верхний_предел Числовая константа, переменная или выражение задающее верхнюю границу диапазона.

Функция INRANGE сравнивает ВЫРАЖЕНИЕ с включительным диапазоном чисел. Если значение ВЫРАЖЕНИЯ попадает в этот диапазон, то функция возвращает единицу ("ИСТИНУ"). Если же ВЫРАЖЕНИЕ больше ВЕРХНЕГО_ПРЕДЕЛА или меньше НИЖНЕГО_ПРЕДЕЛА, то возвращается ноль ("ЛОЖЬ").

Возвращаемый тип данных: LONG

Пример:


    IF INRANGE(Date % 7,1,5)   !Если день - рабочий

     DO WeekdayRate       ! то оплата обычная

    ELSE             !Иначе

     DO WeekendRate       ! плата за работу в выходные

    .              !конец условия

INT (отсекает дробную часть)



      INT(выражение)

выражение Числовая константа, переменная или выражение.

Функция INT возвращает целую часть числового ВЫРАЖЕНИЯ. Знак результата не меняется и округления не производится.

Возвращаемый тип данных: REAL

Пример:


    INT(8.5)  вернет 8

    INT(-5.9) вернет -5

LOGE (натуральный логарифм)



      LOGE(выражение)

выражение Числовая константа, переменная или выражение. Если значение ВЫРАЖЕНИЯ меньше нуля, то возвращается ноль, поскольку натуральный логарифм не определен для отрицательных чисел.

Функция LOGE (произносится как "loge"(ЛОУГ) ) возвращает натуральный логарифм числового ВЫРАЖЕНИЯ. Натуральный логарифм это показатель степени, в которую надо возвести число е, чтобы получилось заданное число.

Значение e мы приняли за 2.71828182846.

Возвращаемый тип данных: REAL

Пример:


   LOGE(2.71828182846) вернет 1

   LOGE(1)       вернет 0



   LogVal = LOGE(Val)  !Получить натуральный логарифм от VAL.

LOG10 (десятичный логарифм)



      LOG10(выражение)

выражение Числовая константа, переменная или выражение. Если значение ВЫРАЖЕНИЯ меньше нуля, то возвращается ноль, поскольку десятичный логарифм не определен для отрицательных чисел.

Функция LOG10 (произносится как "log ten"(ЛОГ ТЭН) ) возвращает десятичный логарифм числового ВЫРАЖЕНИЯ. Десятичный логарифм, это показатель степени, в которую надо возвести 10, чтобы получить заданное число.

Возвращаемый тип данных: REAL

Пример:


    LOG10(10)  вернет 1

    LOG10(1)  вернет 0



    LogStore = LOG10(Var)  !Сохранить десятичный логарифм от VAR

RANDOM (случайное число)



      RANDOM(нижний_предел,верхний_предел)

нижний_предел Числовая константа, переменная или выражение, задающее нижнюю границу диапазона. верхний_предел Числовая константа, переменная или выражение, задающее верхнюю границу диапазона.

Функция RANDOM возвращает случайное целое между НИЖНИМ и ВЕРХНИМ ПРЕДЕЛАМИ включительно. Параметры нижний_предел и верхний_предел могуь быть любыми числовыми выражениями, но в диапазон включается только их целая часть.

Возвращаемый тип данных: LONG

Пример:


    LOOP X# - 1 TO 6

     LottoNbr[X#] = RANDOM(1,49)   !Выбираем числа для 6 из 49

    .

ROUND (округление числа)



      ROUND(выражение,точность)

выражение Числовая константа, переменная или выражение.
точность Числовое выражение, являющееся степенью десяти, как то: 1, 10, 100, 0.1, 0.001 и т.д. Если значение не является точной степенью десяти, то используется ближайшая меньшая степень т.е. 0.55 заменится на 0.1, а 155 - на 100.

Функция ROUND возвращает значение ВЫРАЖЕНИЯ, округленное до заданного ТОЧНОСТЬЮ знака.

Возвращаемый тип данных: REAL

Пример:


    ROUND(5163,100)   вернет 5200

    ROUND(657.50,1)   вернет 658

    ROUND(51.63594,.O1) вернет 51.64



   Commission = ROUND(Price / Rate,.01)

              !Округляем комиссионные до целых копеек

SQRT (квадратный корень)



      SQRT(выражение)

выражение Числовая константа, переменная или выражение. Если значение ВЫРЖЕНИЯ меньше нуля, то возвращается 0.

Функция SORT возвращает квадратный корень из ВЫРАЖЕНИЯ. Если Х - это любое положительное вещественное число, то корень квадратный из Х, это такое число, которое, будучи умноженным само на себя, даст Х.

Возвращаемый тип данных: REAL

Пример:


   Length = SORT(X^2 + Y^2)

        !По теореме Пифагора находим расстояние от 0,0 до X,Y

ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ

Тригонометрические функции возвращают значения, представляющие углы и соотношения сторон прямоугольного треугольника (содержащего угол в 90њ). Гипотенуза, это сторона треугольника, противостоящая его прямому углу. (Остальные подробности можно узнать из любого нормального учебника тригонометрии, что по-гречески означает "измерение треугольников").

Углы выражаются в радианах. PI (ПИ) - это константа, которая представляет соотношение между длиной окружности и ее радиусом. В окружности есть 2*Pl радиан (или 360 градусов).

Ниже приведены более или менее точное значение ПИ и коэффициенты преобразований между радианами и градусами.


    Pi    EQUATE(3.1415926535898) !Значение ПИ

    Rad2Deg EQUATE(57.295779513082) !Градусов в радиане

    Deg2Rad EQUATE(.0174532925199) !Радиан в градусе

SIN (синус)



      SIN(радиан)

радиан Числовая константа, переменная или выражение, задающее угол в радианах.

Функция SIN возвращает тригонометрический синус угла, выраженного в радианах. Синус - это соотношение между длиной стороны противоположной углу и длиной гипотенузы.

Возвращаемый тип данных: REAL

Пример:


   Angle = 45 * Deg2Rad  !Переводим 45њ в радианы

   SineAngle = SIN(Angle) !Получаем синус угла в 45њ

COS (косинус)



      COS(радиан)

радиан Числовая константа, переменная или выражение, задающее угол в радианах.

Функция COS возвращает тригонометрический косинус угла, выраженного в радианах. Косинус это отношение стороны прилегающей к углу и гипотенузы.

Возвращаемый тип данных: REAL

Пример:


   Angle = 45 * Deg2Rad   !Переводим 45њ в радианы

   CoSineAngle = SIN(Angle) !Получаем косинус угла в 45њ

TAN (тангенс)



      TAN(радиан)

радиан Числовая константа, переменная или выражение, задающее угол в радианах.

Функция TAN возвращает тригонометрический тангенс угла, выраженного в радианах. Тангенс это отношение стороныы противоположной углу и стороны прилегающей к углу.

Возвращаемый тип данных: REAL

Пример:


   Angle = 45 * Deg2Rad   !Переводим 45њ в радианы

   TangentAngle = SIN(Angle) !Получаем тангенс угла в 45њ

ASIN (арксинус)



      ASIN(выражение)

выражение Числовая константа, переменная или выражение, задающее синус угла.

Функция ASIN возвращает ОБРАТНЫЙ синус. "Обратить синус" означает "получить угол, имеющий заданный синус". Возвращается угол в радианах.

Возвращаемый тип данных: REAL

Пример:


    InvSine = ASIN(SineAngle)          !Получить арксинус

См. также: SIN

ACOS (арккосинус)



      ACOS(выражение)

выражение Числовая константа, переменная или выражение, задающее косинус угла.

Функция ACOS возвращает ОБРАТНЫЙ косинус. "Обратить косинус" означает "найти угол, имеющий заданный косинус". Возвращается угол в радианах.

Возвращаемый тип данных: REAL

Пример:


    InvCosine = ACOS(CosineAngle)       !Получаем арккосинус

См. также: COS

ATAN (арктангенс)



      ATAN(выражение)

выражение Числовая константа, переменная или выражение, задающее тангенс угла.

Функция ATAN возвращает ОБРАТНЫЙ тангенсу "Обратить тангенс" означает "найти угол, имеющий заданный тангенс". Возвращается угол в радианах.

Возвращаемый тип данных: REAL

Пример:


    InvTangent = ATAN(TangentAngle)      !Получить арктангенс

См. также: TAN

СТРОКОВЫЕ ФУНКЦИИ

ALL (строка из повторяющихся символов)



      ALL(строка[,длина])

строка Строковое выражение, содержащее последовательность символов для повторения.
длина Длина возвращаемой строки. Если пропущена, то будет возвращена строка из 255 символов.

Функция ALL возвращает строку, содержащую СТРОКУ, повторенную несколько раз. Возвращаемый тип данных: STRING

Пример:


    Starline = ALL('*',25)  !Получить 25 звездочек

    Dotline = ALL('.')    !Получить 255 точек

CENTER (центрирование строки)



      CENTER(строка[,длина])

строка Строковая константа, переменная или выражение.
длина Длина результирующей строки. Если пропущена, то используется длина параметра СТРОКА.

Функция CENTER сначала удаляет ведущие и хвостовые пробелы из СТРОКИ, затем дополняет ее ведущими и хвостовыми пробелами так, чтобы строка отцентрировалась в пределах ДЛИНЫ и затем возвращает полученный результат.

Возвращаемый тип данных: STRING

Пример:


    CENTER('ABC',5)  вернет ' ABC '

    CENTER('ABC  ') вернет ' ABC '

    CENTER('  ABC') вернет ' ABC '



   Message = CENTER(Message)         !Сообщение - в центр

   Rpt:Title = CENTER(Name,60)       !Имя - в центр

CHR (переводит ASCII-код символа в символ)



      CHR(код)

код Числовое выражение, содержащее числовой ASCII-код символа.

Функция CHR возвращает символ, представленный его ASCII-кодом.

Возвращаемый тип данных: STRING

Пример:


    Stringvar = CHR(122)  !Строчная "z"

    Stringvar = CHR(239)  !Строчная "я"

CLIP (строка без хвостовых пробелов)



      CLIP(строка)

строка Строковое выражение.

Функция CLIP удаляет хвостовые пробелы из строки. Возвращаемая строка - это подстрока СТРОКИ без хвостовых пробелов. CLIP часто используется вместе с оператором конкатенации (слияния) в строковых выражениях.

Возвращаемый тип данных: STRING

Пример:


   Name = CLIP(Last) &','& CLIP(First) & Init & '.'

                    !ФИО по военному образцу,

                    ! типа "Agarkoff, Serg P."

DEFORMAT (удаляет форматирование из числовых строк)



      DEFORMAT(строка[,шаблон])

строка Строковое выражение, содержащее строку цифр.
шаблон Шаблон формата или метка данного типа STRING, CSTRING или PSTRING, описанного как шаблон формата. Если пропущено, то используется шаблон, использованный для СТРОКИ. (?) Если СТРОКА описана без параметра ШАБЛОН, то возвращаемое значение будет содержать только те символы, которые разрешены в числовых константах.

Функция DEFORMAT удаляет символы форматирования и строки, содержащей цифры, возвращается только то, что можно распознать как число.

Возвращаемый тип данных: STRING

Пример:


    DialString = 'ATDT1' & DEFORMAT(Phone,@P(###)###-####P) & |

           '@13,10)'  !Составляем номер для набора модемом



    ClarionDate = DEFORMAT(dBaseDate,@D1)

          !Получаем стандартную дату из строки вида mm/dd/yy

FORMAT (форматирует число по шаблону)



      FORMAT(значение,шаблон)

значение Числовое выражение, содержащее значение для форматирования.
шаблон Шаблон формата или метка STRING, CSTRING или PSTRING описанной с параметром ШАБЛОН.

Функция FORMAT возвращает числовую строку, отформатированную согласно параметру ШАБЛОН.

Возвращаемый тип данных: STRING

Пример:


    Rpt:SocSecNbr = FORMAT(Emp:SSN,@P###-##-####P)

        !Форматируем под номер карточки социального страхования



    Phone=FORMAT(DEFORMAT(Phone,@P###-###-####P),@P(###)###-####P)

             !Заменяем в номере некоторые дефисы на скобки



    DateString = FORMAT(DateLong,@D1)  !Преобразуем дату в строку

INSTRING (позиция подстроки в строке)



      INSTRING(подстрока,строка[,шаг][,старт])

подстрока Строковая константа, переменная или выражение, содержащее искомую строку.
строка Метка переменной типа STRING, CSTRING или PSTRING, в которой искать.
шаг Числовая константа, переменная или выражение, задающее размер шага поиска. ШАГ=1 означает, что ПОДСТРОКА будет искаться с каждого символа СТРОКИ, ШАГ=2 - с каждого второго символа и так далее. Если пропущен, то по умолчанию равен длине ПОДСТРОКИ.
старт Числовая константа, переменная или выражение, задающее начальную точку, номер символа, для поиска ring. Если пропущен, поиск начнется с первого символа СТРОКИ.

Функция INSTRING проходит по СТРОКЕ, отыскивая в ней вхождения ПОДСТРОКИ. Если ПОДСТРОКА найдена, то возвращается номер символа в СТРОКЕ, с которого начинается вхождение в нее ПОДСТРОКИ. Если же ПОДСТРОКА не найдена, то INSTRING возвращает 0.

Возвращаемый тип данных: LONG

Пример:


      INSTRING('DEF','ABCDEFGHIJ',1,1)  вернет 4

      INSTRING('DEF','ABCDEFGHIJ',2,1)  вернет 0

      INSTRING('DEF','ABCDEFGHIJ',2,2)  вернет 2

      INSTRING('DEF','ABCDEFGHIJ',3,1)  вернет 2



    Extension = SUB(FileSpec,INSTRING('.',FileSpec) + 1,3)

           !Выделяем расширение из полной спецификации файла



    IF INSTRING(Search.Cus:Notes,1,1)  !Если искомая переменная

                                       ! найдена, то

     Scr:Message = 'Есть такая буква!' ! сообщить об этом

    .

LEFT (строка, выравненная влево)



      LEFT(строка[,длина])

строка Строковая константа, переменная или выражение.
длина Числовая константа, переменная или выражение, задающее длину возвращаемой строки. Если опущена, то длина результата равна длине СТРОКИ.

Функция LEFT возвращает СТРОКУ, выравненную влево. Ведущие пробелы удаляются из СТРОКИ.

Возвращаемый тип данных: STRING

Пример:


    CompanyName = LEFT(CompanyName) !Название фирмы сдвинуть влево

LEN (длина строки)



      LEN(строка)

строка Строковая константа, переменная или выражение.

Функция LEN возвращает длину СТРОКИ. Если параметр СТРОКА это метка переменной, то LEN вернет ЗАДАННУЮ ПРИ ОПИСАНИИ длину этой переменной. Числовые значения автоматически преобразуются в промежуточные строковые.

Возвращаемый тип данных: LONG

Пример:


    IF LEN(CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)) > 30

          !Если полное ФИО не укладывается в заданную длину,

     Rpt:Name = CLIP(Title) &' '& SUB(First.1.1) &'.'& Last

          ! то вместо отчества используем инициал.

   ELSE

     Rpt:Name = CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)

          ! ну а если все в порядке, то поставим полное ФИО

    .



    Rpt:Title = CENTER(Cus:Name,LEN(Rpt:Title))

                     !Центрируем имя в заголовке

LOWER (нижний регистр)



      LOWER(строка)

строка Строковая константа, переменная или выражение для преобразования.

Функция LOWER возвращает строку, в которой все буквы - строчные.

(А.С.П. - Что не совсем верно для русского текста,с которым CLARION SoftWare ну никак не хочет дружить :( )

Возвращаемый тип данных: STRING

Пример:


    Name = SUB(Name,1,1) & LOWER(SUB(Name,2,19))

           !Все буквы имени, кроме первой, сделаем строчными

NUMERIC (состоит ли строка только из цифр?)



      NUMERIC(строка)

строка Строковая константа, переменная или выражение.

Функция NUMERIC возвращает 1 (ИСТИНУ) если строка содержит разрешенное числовое значение. Она вернет 0 (ЛОЖЬ) если строка содержит нецифровые символы. Разрешенные символы, это цифры от 0 до 9, ведущий знак минус и десятичная точка.

Возвращаемый тип данных: LONG

Пример:


    IF NOT NUMERIC(PartNumber)  !Если номер запчасти - не число,

     DO ChkValidPart       !то проверим его на допустимость

    .               !конец условия

RIGHT (строка, выравненная вправо)



      RIGHT(строка[,длина])

строка Строковая константа, переменная или выражение.
длина Числовая константа, переменная или выражение, задающее длину возвращаемой строки. Если пропущена, то длина результата равна длине СТРОКИ.

Функция RIGHT возвращает строку, выравненную вправо. Хвостовые пробелы удаляются, затем строка дополняется слева ведущими пробелами до ДЛИНЫ.

Возвращаемый тип данных: STRING

Пример:


    Message = RIGHT(Message)      !Сообщение сдвинуть вправо

SUB (возвращает подстроку строки)



      SUB(строка,позиция,длина)

строка Строковая константа, переменная или выражение.
позиция Целочисленная константа, переменная или выражение. Ели ПОЗИЦИЯ положительна, то она задает номер символа от начала СТРОКИ, если отрицательная, то от конца СТРОКИ.
длина Числовая константа, переменная или выражение, задающая количество возвращаемых символов.

Функция SUB возвращает ДЛИНА символов из СТРОКИ, начиная с заданной ПОЗИЦИИ.

Возвращаемый тип данных: STRING

Пример:


    SUB('ABCDEFGHI',1,1)  вернет 'A'

    SUB('ABCDEFGHI',-1,1) вернет 'I'

    SUB('ABCDEFGHI',4,3)  вернет 'DEF'

   

    Extension = SUB(FileName,INSTRING('.',FileName,1,1),3)

                      !Получаем расширение файла

См. также: INSTRING

UPPER (верхний регистр)



      UPPER(строка)

строка Строковая константа, переменная или выражение для преобразования.

Функция UPPER возвращает СТРОКУ, в которой все символы - заглавные.

(А.С.П. - Что не совсем верно для русского текста, с которым CLARION SoftWare ну никак не хочет дружить :( )

Возвращаемый тип данных: STRING

Пример:


     Name = UPPER(Name)    !Все имя вывести на верхнем регистре

VAL (код символа)



      VAL(символ)

символ Однобайтная строка, содержащая СИМВОЛ.

Функция VAL возвращает ASCII-код СИМВОЛА.

Возвращаемый тип данных: LONG

Пример:


    VAL('я') вернет 239

    VAT('z') вернет 122



    CharVal = VAL(StrChar)

             !Получить ASCII-код символа из StrChar

БИТОВЫЕ ФУНКЦИИ

JOKE: -Что такое бит?
-Это байт за вычетом налогов.
-Что такое байт?
-[восемь раз объясняется, что такое бит]
-А что же такое килобайт?
-Ну, это очень долго объяснять...

BAND (побитовое И - AND)



      BAND(значение,маска)

значение Числовая константа, переменная или выражение, задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
маска Числовая константа, переменная или выражение, задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

Функция BAND сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛОГИЧЕСКОЕ И над каждым битом. Возвращается длинное целое, в котором единицы будут только в тех местах, где они были и в ЗНАЧЕНИИ и в МАСКЕ, в остальных местах будут нули.

BAND обычно используется для выяснения значения одного или нескольких бит (0 или 1) в переменной.

Возвращаемый тип данных: LONG

Пример:


    BAND(0110b,0010b)   вернет 0010b   !0110b = 6, 0010b = 2



   RateType BYTE         !Тип оклада

   Female  EQUATE(0001b)    !Маска для женщин

   Male   EQUATE(0010b)    !Маска для мужчин

   Over25  EQUATE(0100b)    !Маска для тех, кто старше 25 лет



       CODE

    IF BAND(RateType,Female) |    !Если женщина

      AND BAND(RateType,Over25   ! старше 25 лет,

    DO BaseRate          ! то премия - обычная

    ELSIF BAND(RateType,Male)    !Если мужчина,

    DO AdjBase           ! то подправить размер премии

    .                !End if

BOR (побитовое ИЛИ - OR)



      BOR(значение,маска)

значение Числовая константа, переменная или выражение, задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
маска Числовая константа, переменная или выражение, задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

Функция BOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛОГИЧЕСКОЕ ИЛИ над каждым битом. Возвращается длинное целое, в котором единице будут равны те биты, которые были единицами либо в ЗНАЧЕНИИ, либо в МАСКЕ либо и там и там, остальные биты будут нулями.

BOR обычно используется для того, чтобы принудительно установить один или несколько битов переменной в единицу.

Возвращаемый тип данных: LONG

Пример:

 

    BOR(0110b,0010b) вернет 0110b !0110b = 6, 0010b = 2



   RateType BYTE         !Тип оклада

   Female  EQUATE(0001b)    !Маска для женщин

   Male   EQUATE(0010b)    !Маска для мужчин

   Over25  EQUATE(0100b)    !Маска для тех, кто старше 25 лет



      CODE

      RateType = BOR(RateType,Over25) !Установить признак "стар-

                      ! ше 25 лет"

      RateType = BOR(RateType,Male)  !Установить признак "оклад

   				   ! мужчин"

BXOR (Побитовое Исключающее ИЛИ - XOR)



      BXOR(значение,маска)

значение Числовая константа, переменная или выражение, задающее битовое значение, на которое накладывается МАСКА. ЗНАЧЕНИЕ, при необходимости, преобразуется к типу LONG перед операцией.
маска Числовая константа, переменная или выражение, задающее битовую маску. При необходимости, МАСКА преобразуется к типу LONG перед выполнением операции.

Функция BXOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛОГИЧЕСКОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ над каждым битом. Возвращается длинное целое, в котором в единицу будут установлены только те биты, которые были единицами и в ЗНАЧЕНИИ и в МАСКЕ. Те биты, которые не совпали в МАСКЕ и ЗНАЧЕНИИ, а также те, которые были нулями и там и там, будут нулями.

BXOR обычно используется для переключения из 1 в 0 или наоборот одного или нескольких битов переменной.

Возвращаемый тип данных: LONG

Пример:


    BXOR(0110b,0010b) вернет 0100b  !0110b=6, 0100b=4, 0010b=2

   

   RateType BYTE         !Тип оклада

   Female  EQUATE(0001b)    !Маска для женщин

   Male   EQUATE(0010b)    !Маска для мужчин

   Over25  EQUATE(0100b)    !Маска для тех, кто старше 25 лет

   Over65  EQUATE(1100b)    !Маска для тех, кто старше 65 лет

   

       CODE

    RateType = BXOR(RateType,Over65) !Инвертировать признак "стар-

   				  ! ше 65 лет"

BSHIFT (побитовый сдвиг)



      BSHIFT(значение,счетчик)

значение Числовая константа, переменная или выражение. При необходимости, преобразуется к типу LONG перед операцией.
счетчик Числовая константа, переменная или выражение, задающее на сколько бит нужно сдвинуть ЗНАЧЕНИЕ. Если СЧЕТЧИК положителен, значение сдвигается ВЛЕВО, если отрицателен - то ВПРАВО.

Функция BSHIFT сдвигает биты ЗНАЧЕНИЯ на СЧЕТЧИК битов. ЗНАЧЕНИЕ может быть сдвинуто ВЛЕВО (от младших битов к старшим) или ВПРАВО (от старших к младшим), освобождающиеся места заполняются нулями.

(А.С.П. - можно сказать, что BSHIFT умножает (СЧЕТЧИК>0) или делит (СЧЕТЧИК<0) ЗНАЧЕНИЕ на 2 в степени СЧЕТЧИК. Скажем, чтобы умножить Х на 16 можно выполнить либо А=Х*16 либо А=BSHIFT(X,4), причем последнее выражение выполнится быстрее первого, поскольку обычно реализуется на уровне процессорной команды сдвига. В ФОРТЕ используется именно этот принцип)

Возвращаемый тип данных: LONG

Пример:


    BSHIFT(0110b,1)  вернет 1100b

    BSHIFT(0110b,-1) вернет 0011b

   

    Varswitch = BSHIFT(20,3)      !Умножаем на 8

    Varswitch = BSHIFT(Varswitch,-2)  !Делим на 4

(А.С.П. - когда я писал свое примечание, я еще не смотрел на две предыдущие строки :)

Назад | Содержание | Вперед