如何将有符号的long型转换成无符号的long型

herowach 2008-11-25 01:28:41
例如一个负的长整型-1234567890, 如何能转换成正的长整型?(给C++模块用),移位?
...全文
474 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
herowach 2008-11-26
  • 打赏
  • 举报
回复
经测试,
long lSrc = -1984060040;
System.out.println(Long.toString(lSrc, 2));//-1110110010000100101101010001000

long lAbsoluteValue = Math.abs(lSrc);
System.out.println(Long.toString(lAbsoluteValue, 2));//1110110010000100101101010001000

long lDst = ~lAbsoluteValue;
System.out.println(Long.toString(lDst , 2));//-1110110010000100101101010001001
System.out.println(Long.toString(Math.abs(lDst) , 2));//1110110010000100101101010001001

崩溃,咋能把1110110010000100101101010001000取反变成0001001101111011010010101110111啊?
来个正则表达式也成,我直接用字符串拼起转成Long算了~~~

herowach 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kao331431214 的回复:]
你是要反转缺不改符号位么
那就用 & | ^ 这3个都可以~
[/Quote]
你还没理解我的需求...
herowach 2008-11-26
  • 打赏
  • 举报
回复
哦,我搞错了,不能求反,-1984060040本身就是无符号的2310907256,如果求反就会变成1984060039,显然是不对的
怎么能直接转成无符号呢,思考中```
kao331431214 2008-11-26
  • 打赏
  • 举报
回复
如果你那数字是动态的那就很难了
直接向右移1位 记得用>> 这也是个办法
但是如果是动态数字 你就要想个算法出来了
kao331431214 2008-11-26
  • 打赏
  • 举报
回复
你是要反转缺不改符号位么
那就用 & | ^ 这3个都可以~
xian_hf 2008-11-26
  • 打赏
  • 举报
回复
没弄过,手动加个符号位?
herowach 2008-11-26
  • 打赏
  • 举报
回复
顶起```
herowach 2008-11-26
  • 打赏
  • 举报
回复
举个例子:
-1984060040 , 我希望把它转成无符号整数,
那么1984060040的二进制是01110110010000100101101010001000(最高位为符号位),
根据负数转正数的方法是 求其补码,
那么01110110010000100101101010001000的反码是10001001101111011010010101110111,
补码是反码+1,即10001001101111011010010101111000,
这个数的十进制就是2310907256,
我就是想知道在JAVA里怎么能得到这个正数,
~-1984060040取反不会带上符号位,请问怎么能将符号位也给带上?
shenjie1989 2008-11-25
  • 打赏
  • 举报
回复
给C++模块用????????????什么意思
JackyNone 2008-11-25
  • 打赏
  • 举报
回复
你要的是什么?
herowach 2008-11-25
  • 打赏
  • 举报
回复
在线等,顶起```
herowach 2008-11-25
  • 打赏
  • 举报
回复
先声明,不是取绝对值...

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧