A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 向阳泪无痕 高级黑马   /  2013-10-14 18:47  /  2121 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家帮看下,下面这是什么问题
public static void main(String args[]){
       long num = 08;
       System.out.println(num);
}
这个输出是为什么说数据过大.....
如果把  num = 0123 为什么输出的结果不是 0123 而是其它值   
我知道的是  0 放在最前面让其变成了负数  但这个结果是怎么出来的呢?为什么会这样呢

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1

查看全部评分

6 个回复

倒序浏览
顶一个。
回复 使用道具 举报
你这个定义变量时候就已经出现错误了,不能这样定义,要定义8就直接8前面不能加零    你要是想打负数前面直接加  -  就行。0代表符号这个是2进制里面的,你可以去看家进制转换,还有要注意的是定义变量的时候不要超过类型的范围,超过范围编译时就会报错,  long 类型的范围是 -12^63~2^63-1   ^表示多少次方

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
0 放在最前面不是让其变成了负数,而是让其变成一个八进制数,八进制数里只用0-7,long num = 08;所以你这句话赋值会出错,不相信你可以是把0123这个数由八进制转换成十进制,看看输出的是不是对应的十进制数。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
  1. class Test
  2. {
  3.         public static void main(String args[]){
  4.        long num =8;//这里楼主如果相给num赋8的值的话直接这样写就好
  5.            /*以0开头的int类型数字如08默认是二进制,会超出范围*/
  6.        System.out.println(num);
  7. }
  8. }
复制代码
回复 使用道具 举报
这个问题  解决后 怎么改成 已解决状态  新手不懂  谢谢
回复 使用道具 举报
额 你的理解有问题,java程序中的数字是分进制的,有二进制,八进制,十进制和十六进制之分,咱们平常使用的是十进制,但是在编写java程序的时候可能很多时候要使用十六进制或者八进制
有下面你需要记住(一个程序员最起码得知道计算机中的进制转换)
一个数字前面带了0那么这个表示他按八进制数字,八进制数字中每位数字最大为7可以为7,但是不能为8
十六进制是前面呆着0x  或者0X,而1.7版本又增加了二进制,前面以0b 开头。
你需要补一点知识就是  计算机中的进制转换,我也不知道毕老师的课程里讲了没,可能讲的也少,
这个网上找个视频看下 半小时全通了。
你的这些问题,我们以前也遇到过。。。

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马