[Haskell-cafe] Please explain behavior of setBit

Lemmih lemmih at gmail.com
Sun Nov 13 00:51:55 EST 2005


On 11/13/05, Murray Gross <mgross21 at verizon.net> wrote:
>
> Here is my trivial program:
>
>
> import Bits
>
> main = putStr (show(bit 0::Int)++"  "++show (mybit 0))
>
> mybit:: Int -> Int
> mybit x = setBit (bit 0) x
>
>
>
> The output (with GHC-5) is
>
> 1  1
>
> My question: Why is (bit 0) equal to 1 and not 0?

If only the first bit in an Integer is set then the number is equal to 1.

> That first bit is set
> regardless of the value of x (I have tried several), although in each
> case, the bit I expect to be set is also set (e.g., mybit 4 yields 17).

http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Bits.html

'setBit (bit 0) 4' => 'setBit 1 4' => (binary) 10001 => (dec) 17
You're setting the fifth bit in '1' instead of setting the seconded bit in '4'.

--
Friendly,
  Lemmih


More information about the Haskell-Cafe mailing list