(1)Byte和byte两种类型的的分别byte定义8位,范围-的2的8次方到2的7次方-1。
可我为什么可以定义byte=0x2f,为什么不认为是char型的呢?还是因为0x在前,后面的数按16进制计算出10进制在范围内所以可以用?byte定义了0x2f,这个算是8位吗?还是两位??
0000002f--按位取反得ffffffd0 请问为什么认定是8位呢
int类型的数 47按位取反得-48,经过手动验证,发现也是当作8位来按位取反得到的
int类型的65535按位取反得-65536,经过手动验证,发现是当作16位来按位取反得到的,为什么呢?
默认若小于8位则按8位算?若大于8位小于16位就按16位算,依次类推32位,64位?
(2)System.out.println(Integer.toString(int,irange));----------api中定义的是int类型,可我为什么可以将byte类的值放在参数那列?例如
byte num=0x2f;
System.out.println(Integer.toString(num,irange));想知道定义int类型和byte类型 用对int类型有效的api,对byte类型操作,是否都可以?两者什么情况下导致有分别?反正上面这个例子没分别,真是奇怪(3)还有位运算的操作,不定义变量,直接对1<<31,表示对1左移31位得1000000....0000(31个零),得-2的31次方。因此可以推断,这个移位操作 是将数字1认为是32位的进行操作的,也就是认为是int类型的,而且认定首位为符号位,为什么不当成是8位byte类型的呢?(4)结合(1)来说   47按位取反,得-48,实践发现,是按8位数进行操作,并且将首位定义为符号位了,为什么呢?怎么就默认成8位了?而且什么情况下首位会是符号位?(5)byte类型有符号位吗?如果有,0x2f,这个是否已经占满了8位,表示10进制的47,那么-47如何表示呢?用0x**表示
用函数做,得到47的16进制为2f,-47的16进制为fffffffd1(也就是47的16进制按位取反后加1),可我不知道怎么计算出ffffffd1对应的10进制是-47呢?或者我手动如何计算出-47的16进制是ffffffd1呢?

解决方案 »

  1.   

    (1)byte是基本类型,Byte是封装类型,是一个class,使用的时候是需要用new Byte()的。
    (2)这个应该是JDK自动对byte型类型转换了,可以反编译一下看看。
    (3)因为现在的PC机是32位的CPU,对32位的数字操作比较方便,所以默认的长度都是32位。
    (4)这个不清楚,盼高人解答。
    (5)byte类型是没有符号位的。剩下的不太清楚,盼高人解答。
      

  2.   

    对于2  java有哥装箱和拆箱的操作,可以解释
      

  3.   

    1、Byte 是包装类。某些容器不允许基本型别做成员的,所以需要包装。
    2、楼主可以参考一下 Java 的自动类型转换。
    3、……,你 1<<8 不就是了。位移操作和 byte 无关。
    4、什么叫按 8 位操作?~257 不还是 -258?
    5、不同语言对 byte 理解不同。有的认为 byte 的取值范围是 0~255,意思就是没有符号位;Java 认为是 -128~127,那就是有符号的。