有没有办法将long我从Double.toLongBits后面得到的 a 反转为 a Double?
以下不起作用:
Double n = 171.30672219;
System.out.println(Double.doubleToLongBits(n));
System.out.println(new Double(Double.doubleToLongBits(n)));
Run Code Online (Sandbox Code Playgroud)
这打印:
4640231336019091517
4.6402313360190915E18
虽然我想找回171.30672219
好的,这应该很有趣.
我假设我有以下代码:
在这个例子中,第一个可用的数字是2.
List<long> myList = new List<long>(){0,1,10,3};
在这个例子中,第一个可用的数字是'4'.
List<long> myList = new List<long>(){0,1,2,3};
有任何想法吗?
为了好玩,我一直在java中实现DES算法.(嗯,实际上并不是那么有趣).在算法中,你处理64个数据块,我想:嘿,它是完美的,让我们使用"long"来存储我的二进制数据.
然后我遇到了一个让我生气的严重问题:让我们说你建立一个很长的,像这样:
long value = 785537;
Run Code Online (Sandbox Code Playgroud)
假设您想要将值的最高位设置为1,您可以执行以下操作:
value |= 0x8000000000000000l;
Run Code Online (Sandbox Code Playgroud)
很简单,对吧?但它根本不起作用.Java可以轻松改变另一位,这意味着
value |= 0x7000000000000000l;
Run Code Online (Sandbox Code Playgroud)
将工作.但如果它是最重要的一点,它将无法工作.
为什么?有没有办法实现我想要的?
提前感谢您的回答.
编辑:
以下是我编写的代码示例,以二进制形式显示long:
public static void printBits(long input){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 64; i++){
if((input & (0x1l << i)) != 0){
builder.append('1');
} else {
builder.append('0');
}
}
System.out.println(builder);
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
long val = -1;
printBits(val);
Run Code Online (Sandbox Code Playgroud)
它将按照预期打印"1111111111111111111111111111111111111111111111111111111111111110".如果我然后输入:
val |= Long.MIN_VALUE;
printBits(val);
Run Code Online (Sandbox Code Playgroud)
要么
val |= 0x8000000000000000l;
printBits(val);
Run Code Online (Sandbox Code Playgroud)
它的印刷"1111111111111111111111111111111111111111111111111111111111111110"也......
如果那么做以下测试:
(val & 8000000000000000l) != 0;
Run Code Online (Sandbox Code Playgroud)
这是假的......
我打算在Python中使用非常大的数字,但是想知道Python是否可以处理非常大的数字.这些数字将有多达3,000个零.
并且,一个有3,000个零的1使用多少字节?
第三个问题,如何将一个数字作为整数保存到Python文件中而不必使用str()它?
我有一个Long变量说,
private Long m_prevPacketRecvdTime = null;
Run Code Online (Sandbox Code Playgroud)
现在我有一个setter/getter对,
public void setM_prevPacketRecvdTime() {
if (this.m_prevPacketRecvdTime == null) {
this.m_prevPacketRecvdTime = new Long(System.currentTimeMillis());
} else {
// Why to create a new Object every time
//Why I can't just set the new value
//Why use new operator here instead of an Assignment or set method call
}
}
Run Code Online (Sandbox Code Playgroud)
而不是传统的setter方法,我想改进它,通过1.传递long而不是Long,2.只创建一个新的Long,剩下的时间只是将新值设置为现有的Long对象.但令我难以置信的是,Long没有这样的方法.
我们是否真的需要在每次想要更改其值时创建一个新的Long对象,我们如何为现有的Long对象设置一个新的long值(与longvalue()相反)?
更多信息 在寻找答案的同时,我也遇到了具有类似功能的AtomicLong,但我不确定这对我是否有用.因为他们清楚地说AtomicLong" 不能用作Long的替代品 ".
我试图BigInteger用来表示long来自Java中的C 的无符号64位(),我的方法与下面的帖子中提到的完全相同.
http://technologicaloddity.com/2010/09/22/biginteger-as-unsigned-long-in-java/
你们其中一个人可以证实这种方法是正确的吗?
在这方面的任何帮助表示赞赏.
我有一个字符串喜欢"01030920316".当我要转换这个字符串时,然后转换为字节,然后给出下面的输出为java
output in java : Tag in bytes : 0, 0, 0, 0, 61, 114, -104, 124
Run Code Online (Sandbox Code Playgroud)
当我得到这个输出时,我在C中做同样的事情
output in C : Tag in bytes : 124,152,114,61,0,0,0,0
Run Code Online (Sandbox Code Playgroud)
在这里,我理解-104 and 152因为有符号和无符号之间的不同,但是为什么在java和C中最初为0.对于这种行为,当我的这个字节进入C程序端进行验证时,我遇到了问题.
请解释我发生问题的地方.
Java程序:
final byte[] tagBytes = ByteBuffer.allocate(8)
.putLong(Long.parseLong("01030920316")).array();
System.out.println("Tag in bytes >> " + Arrays.toString(tagBytes));
Run Code Online (Sandbox Code Playgroud)
C程序:
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
/** To access long long values as a byte array*/
typedef union uInt64ToByte__
{
uint64_t m_Value;
unsigned char m_ByteArray[8];
}uInt64ToByte;
int main()
{
uInt64ToByte …Run Code Online (Sandbox Code Playgroud) 我正在使用查询来根据给定时间提供数据.所以我想抓住一个时间戳删除它的最后3位数.可能吗?怎么样?给我一个提示,我将完全赞成这一点
我想知道这样的事情:
int a = ...;
long b = ...;
if (a < b)
doSomethings();
Run Code Online (Sandbox Code Playgroud)
总是有效(除了未签名)
我只是测试了几个值,但我想确定.我认为a在比较中投入很长时间,其他类型呢?
我目前正在编写一个脚本来尝试解决第13个Euler问题,但每当我运行它时它会产生以下错误.
线程"main"java.lang.NumberFormatException中的异常:对于java.base/java.lang.Long.parseLong中java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)的输入字符串:"37107287533902102798797998220837590246510135740250" (Long.java:692)在java.base/java.lang.Long.parseLong(Long.java:817)的Script_013.main(Script_013.java:108)
进程以退出代码1结束
我不确定为什么会发生这种情况,因为我确信每个字符串都只包含数字.我.trim()在其他帖子上添加了很多评论的建议,但这似乎没有什么区别.
有谁知道为什么会这样.感谢所有帮助,谢谢!
以下是代码;
public class Script_013
{
public static void main (String [] args)
{
String numbers[] = { "37107287533902102798797998220837590246510135740250",
"46376937677490009712648124896970078050417018260538",
"74324986199524741059474233309513058123726617309629",
"91942213363574161572522430563301811072406154908250",
"23067588207539346171171980310421047513778063246676",
"89261670696623633820136378418383684178734361726757",
"28112879812849979408065481931592621691275889832738",
"44274228917432520321923589422876796487670272189318",
"47451445736001306439091167216856844588711603153276",
"70386486105843025439939619828917593665686757934951",
"62176457141856560629502157223196586755079324193331",
"64906352462741904929101432445813822663347944758178",
"92575867718337217661963751590579239728245598838407",
"58203565325359399008402633568948830189458628227828",
"80181199384826282014278194139940567587151170094390",
"35398664372827112653829987240784473053190104293586",
"86515506006295864861532075273371959191420517255829",
"71693888707715466499115593487603532921714970056938",
"54370070576826684624621495650076471787294438377604",
"53282654108756828443191190634694037855217779295145",
"36123272525000296071075082563815656710885258350721",
"45876576172410976447339110607218265236877223636045",
"17423706905851860660448207621209813287860733969412",
"81142660418086830619328460811191061556940512689692",
"51934325451728388641918047049293215058642563049483",
"62467221648435076201727918039944693004732956340691",
"15732444386908125794514089057706229429197107928209",
"55037687525678773091862540744969844508330393682126",
"18336384825330154686196124348767681297534375946515",
"80386287592878490201521685554828717201219257766954",
"78182833757993103614740356856449095527097864797581",
"16726320100436897842553539920931837441497806860984",
"48403098129077791799088218795327364475675590848030",
"87086987551392711854517078544161852424320693150332",
"59959406895756536782107074926966537676326235447210",
"69793950679652694742597709739166693763042633987085",
"41052684708299085211399427365734116182760315001271",
"65378607361501080857009149939512557028198746004375",
"35829035317434717326932123578154982629742552737307",
"94953759765105305946966067683156574377167401875275",
"88902802571733229619176668713819931811048770190271",
"25267680276078003013678680992525463401061632866526",
"36270218540497705585629946580636237993140746255962",
"24074486908231174977792365466257246923322810917141",
"91430288197103288597806669760892938638285025333403",
"34413065578016127815921815005561868836468420090470",
"23053081172816430487623791969842487255036638784583",
"11487696932154902810424020138335124462181441773470",
"63783299490636259666498587618221225225512486764533",
"67720186971698544312419572409913959008952310058822",
"95548255300263520781532296796249481641953868218774",
"76085327132285723110424803456124867697064507995236",
"37774242535411291684276865538926205024910326572967",
"23701913275725675285653248258265463092207058596522",
"29798860272258331913126375147341994889534765745501", …Run Code Online (Sandbox Code Playgroud)