【问题标题】:Java unsigned - remove sign bitJava unsigned - 删除符号位
【发布时间】:2013-01-11 05:22:50
【问题描述】:

我有这个功能:

public static final int UNSIGN(short b){

    return (b & 0xFFFF);
}

这里的目的是使用 'b' 中的值,就好像它是正数一样,我的意思是它好像是一个无符号整数,能够保存 65536 个值。但是,它不起作用。例如:

如果'b == -122',函数返回'65414'。

我也试过这种方式:

public static final int UNSIGN(short b){

    return (b & 0xFF);
}

但如果 'b == 304',那将返回 '48'。

我真的迷路了,希望有人能帮忙。

【问题讨论】:

  • -122 不是正数,那么您希望函数返回什么值?

标签: java converter unsigned unsigned-integer


【解决方案1】:

这里的目的是使用 'b' 中的值,就好像它是正数一样。

您的意思是要找到b 的绝对值吗?那将是Math.abs

但是您的代码 b 视为无符号短。当b 为-122 时,位将是

1111111110000110

...当被视为无符号值时为 65414。

(122 是 0000000001111010,因此要否定它,您将值减 1 并翻转所有位。)

【讨论】:

  • 好吧,我想我没有很好地解释自己。我不想要绝对值,我想要 16 位的正值。基本上我想要这个值,就好像它是 unsigned short 一样。
  • @sazr:这正是它给你的。对于 b == -122,您想要为您提供什么价值?
  • 你为什么期望这个值?
  • 没错。此外,在您的问题中,您写道您期望b=304 有一些结果。显然,您也不想要字节。也许你应该退后一步想想你真正想要什么,因为如果 Jon Skeet 的答案不正确,那么问题就是错误的。
  • 如果参数始终在 [0;255] 中,您已经在问题中给出了正确答案:return (b & 0xFF);。只要确保你永远不会用别的东西来调用它。 (另外,如果你的问题很难解释,当你几乎不做任何解释时,你期望得到什么样的答案?)
猜你喜欢
  • 1970-01-01
  • 2011-08-24
  • 2015-09-14
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
相关资源
最近更新 更多