在Java中反转unsigned to signed conversion

时间:2012-03-27 19:17:39

标签: java c++

使用C ++,int从“signed”转换为“unsigned”。

我可以使用Java将此“unsigned”int转换回“signed”。

  

使用C ++将有符号值(-3)转换为无符号(65533)。

     

如何使用Java

将无符号(65533)值转换回带符号(-3)

提前致谢。

Prav

4 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,你就会有一些像

这样的价值
int value = 65533;

并且您希望将其视为带符号的16位整数,解决方案非常简单:

short signed = (short) value; // -3

答案 1 :(得分:1)

您可以使用以下内容:

if (a > 32767) a -= 65536;

答案 2 :(得分:0)

C ++中的int通常是32位,但是,您将65533称为-3,因此您的int有16位。大多数人会认为16bit int为short(int)

Java中的int / Integer总是32位。

当你想将有符号的短int:-3转换为unsigned short int时,你得到的只是65533.这是关于n a的位。

在Java中只做

 int i = 65533; // or other values from unsigned short int

 if (i >= (1<<15) {
    i -= 1 << 16;
 }

答案 3 :(得分:0)

您使用C ++解释有符号整数,并将其表示为无符号2字节整数。

返回的方法只能假设表示是一个2字节的整数,通过或者返回符号扩展位(警告,这是未经测试的),以下内容应该有效:

int number = 65533;

// check sign bit for 2-byte integer, add in sign bits for 4 byte integer if set 
int signedNumber = (0 == (number & 0x8000)) ? number : (number | 0xFFFF0000);