如何在erlang中获得一位十进制整数

如何在erlang中获得一位十进制整数,erlang,Erlang,给定一个数字,例如16877,我想测试一个位位置(pos),看看是0还是1 例如,我知道上面的数字表示为1000011101101 位pos 1=1 位pos 2=0 位3=1 考虑到数字应该以二进制形式存储在erlang的vm中,我可以使用什么函数,比如: Pos = 1, Bit = getBit ( Pos , 16877 ). 使用位运算符,卢克 getBit(Pos, Number) -> case (1 bsl Pos) band Number of

给定一个数字,例如16877,我想测试一个位位置(pos),看看是0还是1

例如,我知道上面的数字表示为1000011101101

  • 位pos 1=1
  • 位pos 2=0
  • 位3=1
考虑到数字应该以二进制形式存储在erlang的vm中,我可以使用什么函数,比如:

Pos = 1,
Bit = getBit ( Pos , 16877 ).

使用位运算符,卢克

getBit(Pos, Number) ->
    case (1 bsl Pos) band Number of
        0 -> 0;
        _ -> 1
    end.
该函数接受0的位置,但如果您喜欢基于1的索引,请随意减少位置:

1> Fun = fun(Pos, Num) -> case (1 bsl Pos) band Num of 0 -> 0; _ -> 1 end end.
#Fun<erl_eval.12.82930912>
2> Fun(0, 16877).
1
3> Fun(1, 16877).
0
4> Fun(2, 16877).
1
5> Fun(3, 16877).
1
1>Fun=Fun(Pos,Num)->case(1个bsl Pos)频带数为0->0;\uu->1结束。
#乐趣
2> 乐趣(016877)。
1.
3> 乐趣(116877)。
0
4> 乐趣(216877)。
1.
5> 乐趣(316877)。
1.

我不知道库中是否有类似的内容,但下面是一个实现:

get_bit(1, Num) -> Num rem 2;
get_bit(Pos, Num) -> get_bit(Pos-1, Num div 2).
以及输出:

1> test:get_bit(2, 16877).
0
2> test:get_bit(3, 16877).
1
3> test:get_bit(6, 16877). 
1
4> test:get_bit(10, 16877).
0
5> test:get_bit(11, 16877).
0
应该这样做

bit(Number, Bit) ->
  (Number bsr Bit) band 1.

右移,改为带1,避免创建bignum,不需要case语句。