小编fs.*_*fs.的帖子

C/C++ Bit Twiddling

graphics.stanford.edu/~seander/bithacks.html的精神,我需要解决以下问题:

int x; 
int pow2; // always a positive power of 2
int sgn;  // always either 0 or 1
// ...
// ...
if(sgn == 0)
    x -= pow2;
else
    x += pow2;
Run Code Online (Sandbox Code Playgroud)

当然我需要避免有条件的.到目前为止,我想到的最好的是

x -= (1|(~sgn+1))*pow2
Run Code Online (Sandbox Code Playgroud)

但这涉及乘法,我也想避免.提前致谢.

编辑:谢谢大家,

x -= (pow2^-sgn) + sgn
Run Code Online (Sandbox Code Playgroud)

似乎做的伎俩!

c c++ bit-manipulation

15
推荐指数
1
解决办法
1040
查看次数

Haskell的见解

我发现自己非常需要你的见解.

这是我感兴趣的对象:

class Mergable m where
    merge :: m -> m -> Maybe m
    mergeList :: [m] -> [m]

    mergeList [] = []
    mergeList [x] = [x]
    mergeList (x:y:t) = r1 ++ mergeList (r2 ++ t)
        where
            (r1,r2) = case (x `merge` y) of
                Just m  -> ([ ], [m])
                Nothing -> ([x], [y])
Run Code Online (Sandbox Code Playgroud)

但是我稍后会回来.现在我准备了一些例子:

data AffineTransform = Identity
                     | Translation Float Float
                     | Rotation Float
                     | Scaling Float Float
                     | Affine Matrix3x3

instance Monoid AffineTransform where
    mempty = Identity …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
1
解决办法
468
查看次数

标签 统计

bit-manipulation ×1

c ×1

c++ ×1

haskell ×1