Binary 朱莉娅·朗:负二进制数表示法
在Julia中,如何用二进制表示负数 以下是我尝试过的: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
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
@张实唯: 哇,这真的管用。事实上,这是理想的效果。很不错的!