Binary 朱莉娅·朗:负二进制数表示法

Binary 朱莉娅·朗:负二进制数表示法,binary,numbers,julia,Binary,Numbers,Julia,在Julia中,如何用二进制表示负数 以下是我尝试过的: Int(0b10) 按预期返回2。现在,第一位应该表示数字的符号,因此人们可能期望编译以下代码: Int(1b10) 但事实并非如此。实际上,它返回以下错误: UndefVarError: b01 not defined 当然: bin(-1) 返回 “-1” 这并不是负数的二进制表示 有什么想法吗 编辑-找到解决方案: unsigned(-1) 0xffffffffffffffff 然后你要做的就是: bin(unsign

在Julia中,如何用二进制表示负数

以下是我尝试过的:

Int(0b10)
按预期返回2。现在,第一位应该表示数字的符号,因此人们可能期望编译以下代码:

Int(1b10)
但事实并非如此。实际上,它返回以下错误:

UndefVarError: b01 not defined
当然:

bin(-1)
返回

“-1”

这并不是负数的二进制表示

有什么想法吗

编辑-找到解决方案:

 unsigned(-1)
 0xffffffffffffffff
然后你要做的就是:

bin(unsigned(-1))
"1111111111111111111111111111111111111111111111111111111111111111"

与许多其他语言一样,Julia使用两个补码来表示有符号整数。要表示负数,您可以使用
获取其位表示a.k.a,取其正部分二进制表示的两个补码:

help?> bits
search: bits isbits flipbits! bitbroadcast bitrand BitArray BitVector BitMatrix signbit LibGit2

  bits(n)

  A string giving the literal bit representation of a number.

     Example
    ≡≡≡≡≡≡≡≡≡

  julia> bits(4)
  "0000000000000000000000000000000000000000000000000000000000000100"

  julia> bits(2.2)
  "0100000000000001100110011001100110011001100110011001100110011010"

julia> bits(-1)
"1111111111111111111111111111111111111111111111111111111111111111"

欢迎来到堆栈溢出!你写了一个很好的问题。我鼓励你把它作为一个真实的答案,而不是编辑这个问题——这样的事情很受欢迎,你也可以接受你自己的答案。谢谢你的回答。但我认为我试图实现的目标实际上是不可能的,因为“无符号整数是使用0x前缀输入和输出的”,因此实际上不可能将其内涵用于负值。@user2550228我不知道您为什么试图将其转换为无符号整数。要得到一个负数的二进制表示,我们只需要取它的正二进制表示的2的补码。这是一个有用的练习。@user2550228虽然有点疯狂,但您可以使用
0x
表示法表示多个位,然后将其转换为有符号整数。例如,
重新解释(Int8,0xff)
返回
-1
@张实唯: 哇,这真的管用。事实上,这是理想的效果。很不错的!