neodreamerus 发表于 2015-05-26 21:41

请教java中整数类型转换的问题

请教java中整数类型转换的问题

在java语言里,有没有办法通过类型转换将下面的a变成b?
bytea = 1111 1111 = -1;
short b = 0000 0000 1111 1111 = 255;

在java语言里,没有无符号整数类型。直接 (short)a 得到的数是 1111 1111 1111 1111 = -1 = 65535
在C语言里,这种转换很简单 b = (short)(unsigned char)a;

在C语言中,一个特定长度的无符号整数类型的最大值可用相同长度有符号整数类型的-1表示。
例如 unsigned char uchar_max = (unsigned char)-1;
#include <stdio.h>

int main(void) {

   signed char a = -100;
   int b = (int)((unsigned char)a);
   printf("a = %d\n", b);

   return 0;
}

neodreamerus 发表于 2015-05-27 22:22

本帖最后由 neodreamerus 于 2015-05-27 22:23 编辑

自己想了个办法,过程如下面代码所示,比C麻烦一点,有点曲折。
public class hello {

    public static void main(String[] args) {

         byte a = (byte)Integer.parseInt(args);

         int b = (int)(a&128);
         int c = (int)(a&127);
         System.out.println( b );
         System.out.println( c );
         System.out.println( b|c );

    }
}

byte 类型的-1变成int/short型时会变成255,-2转成254

neodreamerus 发表于 2015-05-27 22:22

自己想了个办法,过程如下面代码所示,比C麻烦一点,有点曲折。
public class hello {

    public static void main(String[] args) {

         byte a = (byte)Integer.parseInt(args);

         int b = (int)(a&128);
         int c = (int)(a&127);
         System.out.println( b );
         System.out.println( c );
         System.out.println( b|c );

    }
}

页: [1]
查看完整版本: 请教java中整数类型转换的问题