我正在尝试将负长数(例如-1065576264718330231L)转换为二进制。 首先,我通过删除符号将负数转换为正数; 其次,我得到第一步结果的二进制文件;
然后我陷入了对第二步的二进制结果“加一”的困境,即:
拜托!第三步如何实现? 或者您还有其他更好的解决方案吗?!
http://geekexplains.blogspot.com/2009/05/binary-rep-of-negative-numbers-in-java.html
最佳答案
有符号整数/长整数使用二补码表示法:
假设你有-6:
6 = 000..000 110 binary
111..111 001 one's complement
111..111 010 add 1
-6 = 111..111 010
优点是普通的二进制加法可以工作(-6+6=0),只有一个 0。
你们可以简单地用 0 减去 6:
000
110
------ -
0
1 borrow 1 (all ones at the top)
0
...111
111...111010 = -6
Note:
If one borrows (subtracts one of) 0000000, one actually uses an overflow:
(1)0000000 which minus 1 delivers
1111111
好东西:
long n = -1065576264718330231L;
System.out.println(Long.toUnsignedString(n, 2));
System.out.println(Long.toString(n, 2));
关于java - java中如何将负数转换为二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952924/