class Test{
public static void main(String args[]){
byte b=(byte)129;
System.out.println(b);
}
}
为什么输出的b为-127?
class Test{
public static void main(String args[]){
byte b=(byte)127;
System.out.println(b);
}
}
而正常输出127呢?是不是与byte的取值范围有关?
高手帮帮解释下。
解决方案 »
- 谁闲着没事干的,帮我看下这个问题
- js变量怎样加入超链接
- [Microsoft][ODBC SQL Server Driver]语法错误或违反访问规则,急求回答
- 一个新手的问题,望大家给于点帮助
- 关于运行时调用到接口中的数据而报错的一个问题~~请大家都来讨论一下~~指点一二~
- 类反射(字段无序)
- 我把了log4j.jar放到java\lib里面去了,可是运行时还是找不到Logger这个类,why?
- 有谁对“java out of memory”的Exception了解?
- 我有一堆源文件(中间有很多子目录),想统计它们的行数,用什么工具比较好?
- 为什么无法执行!!!!
- 菜鸟问题:未初始化小程序
- java控制台输入格式如何控制?
byte: -128 - 127
1000 0001
byte范围为-128~127,也就是说这个数在byte里第一位就成了符号位了,1代表负数,要求得他的值,就得求补码,补码就是反码+1
反码为
1111 1110
再加1
1111 1111
也就是-127
129先以int型存储,129为整数,其补码不变,int为32位,所以存储后为0000 0000 0000 0000 0000 0000 1000 0001
强制转换为byte,byte为8位,所以取int型的后8位,即1000 0001,byte仍然认为这是一个补码表示的数.
首位为符号位,1表示负数,后7位求原码(减1后按位取反),得到 111 1111,即10进制的127,加符号位-,得到-127.