1
Общий раздел / Странные битовые операции
« : Ноябрь 18, 2016, 03:52:59 pm »Цитировать
видимо, return (x > clip_box.x2) | ((x < clip_box.x1) << 2);А почему не так?
на обероне будет как-то так:
RETURN SYSTEM.VAL( UNSIGNED32, SYSTEM.VAL( SET, ORD( x > clipBox.x2 )) + SYSTEM.VAL( SET, ASH( ORD( x < clipBox.x1 ), 2)));
Код: [Выделить]
RETURN ORD( x > clipBox.x2) + ORD( x < clipBox.x1 ) * 4
Или я что-то упустил? Ещё я не припомню гарантий в описании, что ORD(TRUE) = 1, а ORD(FALSE) = 0, но иначе ORD для BOOLEAN не имел бы смысла.В Си где только можно использую нормальную арифметику вместо битовых операций и не чувствую, что чего-то не хватает.