Java unsigned - 删除符号位

时间:2013-01-27 21:18:30

标签: java converter unsigned unsigned-integer

我有这个功能:

public static final int UNSIGN(short b){

    return (b & 0xFFFF);
}

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

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

我也尝试过这种方式:

public static final int UNSIGN(short b){

    return (b & 0xFF);
}

但如果'b == 304',那将会让我'48'。

我真的迷失在这里,希望有人可以帮忙。

1 个答案:

答案 0 :(得分:3)

  

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

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

但您的代码 正在处理b,就好像它是无符号的短片一样。当b为-122时,位将为

1111111110000110

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

(122是0000000001111010,所以要取消它,你将值减1并翻转所有位。)