Форум » [x]Harbour » Сдвиг числа » Ответить

Сдвиг числа

Pasha: Напомните склеротику, как сделать сдвиг влево/вправо числа в Harbour В xHarbour я просто делаю: nSec >> 5 а Harbour такую операцию не поддерживает NumRoll из ct не подходит, поскольку мне нужен не циклический сдвиг

Ответов - 7

gfilatov2002: Pasha пишет: Harbour такую операцию не поддерживает Это не так (см.ниже) /* xHarbour operators: IN, HAS, LIKE, >>, <<, |, &, ^^ */ #translate ( <exp1> IN <exp2> ) => ( (<exp1>) $ (<exp2>) ) #translate ( <exp1> HAS <exp2> ) => ( HB_REGEXHAS( (<exp2>), (<exp1>) ) ) #translate ( <exp1> LIKE <exp2> ) => ( HB_REGEXLIKE( (<exp2>), (<exp1>) ) ) #translate ( <exp1> \<\< <exp2> ) => ( HB_BITSHIFT( (<exp1>), (<exp2>) ) ) #translate ( <exp1> >> <exp2> ) => ( HB_BITSHIFT( (<exp1>), -(<exp2>) ) ) /* NOTE: These macros can break some valid Harbour/Clipper constructs, so they are disabled by default. Enable them with care, or even better to switch to use HB_BIT*() functions directly. They are optimized by Harbour compiler the same way (and even more) as these C-like operators, without any bad side-effects. */

Pasha: Спасибо Изменил в своем тексте: [pre2]#ifdef __XHARBOUR__ Local nAsw := nSec ^^ ((nSec >> 5) | 0xA0000000) #else Local nAsw := HB_BitXor(nSec, HB_BitOr(HB_BitShift(nSec, -5), 0xA0000000)) #endif[/pre2] Строг оказался Harbour Пересобираю свои программы, и спотыкаюсь на конструкциях вида: if(lExpr, nSum+=Summa, 0) Harbour такое не компилирует, говорит - бессмыссленное использование Numeric Заменяю на if(lExpr, nSum+=Summa,)

gfilatov2002: Pasha пишет: Заменяю на if(lExpr, nSum+=Summa,) Более наглядно выглядит if lExpr nSum+=Summa endif


Pasha: gfilatov2002 пишет: Более наглядно выглядит Да такие конструкции используются внутри блока кода, так что отдельными операторами не получится Меня удивило то, что Harbour генерирует ошибку, хотя вполне достаточно было бы предупреждения

Pasha: Поскольку я сейчас занимаюсь переводом xHarbour --> Harbour, сейчас внимательно изучаю кишки Harbour И вижу, что Harbour теперь работает не как интерпретатор, а пи-код сейчас выполняется покомандно вызовами hb_xvm* отдельно для каждой пи-команды. Этот режим появился довольно давно, еще в xHarbour, но теперь для Harbour он стал основным. Во всяком случае так собраны его библиотеки, с флагом компилятора -gc3 Если собрать exe в таком режиме, его размер получается больше раза в 2-3, но выполняется он по-видимому быстрее

gfilatov2002: Pasha пишет: так собраны его библиотеки, с флагом компилятора -gc3 Да, этот ключ используется при сборке только RDD и RTL библиотек, цель - максимально ускорить выполнение программы

Andrey: Pasha пишет: Если собрать exe в таком режиме, его размер получается больше раза в 2-3, но выполняется он по-видимому быстрее А сколько занимает ехе-файл на хХарборе и Харборе ? В цифрах дать можете ? И как по быстродействию ситуация обстоит ?



полная версия страницы