2012-01-19 48 views
16

Tại sao tôi nhận được số int quá lớn, trong đó thời lượng dài được gán cho phút và tối đa?Số lỗi dài quá lớn Java?

/* 
long: The long data type is a 64-bit signed two's complement integer. 
It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of   9,223,372,036,854,775,807 (inclusive). 
Use this data type when you need a range of values wider than those provided by int. 
*/ 
package Literals; 

public class Literal_Long { 
    public static void main(String[] args) { 
     long a = 1; 
     long b = 2; 
     long min = -9223372036854775808; 
     long max = 9223372036854775807;//Inclusive 

     System.out.println(a); 
     System.out.println(b); 
     System.out.println(a + b); 
     System.out.println(min); 
     System.out.println(max); 
    } 
} 
+1

Bạn có thể sử dụng 'Long.MIN_VALUE' và 'Long.MAX_VALUE' hoặc' 1L << -1' và' -1L >>> 1' –

Trả lời

54

Tất cả số chữ trong java là theo mặc định ints, trong đó có khoảng -2147483648-2147483647 toàn diện.

literals của bạn nằm ngoài phạm vi này, vì vậy để làm điều này biên dịch bạn cần phải biết họ đang long literals (tức là hậu tố với L):

long min = -9223372036854775808L; 
long max = 9223372036854775807L; 

Lưu ý rằng java hỗ trợ cả chữ hoa và chữ thường Ll, nhưng tôi khuyên bạn nên không sử dụng chữ thường l vì nó trông giống như một 1:

long min = -9223372036854775808l; // confusing: looks like the last digit is a 1 
long max = 9223372036854775807l; // confusing: looks like the last digit is a 1 

Java Language Specification cho cùng một số

Một số nguyên là loại dài nếu nó được gắn liền với một chữ cái ASCII L hoặc l (ell); nếu không thì nó thuộc kiểu int (§4.2.1).

+0

Để được pedantic: Bạn cũng có thể sử dụng một nhỏ 'l '. – helpermethod

+8

@OliverWeiler Tôi muốn nói là phàm tạp, bạn có thể ** nhưng không nên ** sử dụng __l__ nhỏ vì nó trông giống như __1__. – TC1

+0

Nó chỉ trông giống như 1 nếu bạn sử dụng phông chữ xấu, nhưng chắc chắn, tại sao lại có nguy cơ nhầm lẫn. – Bladt

17

Bạn phải sử dụng L để nói với trình biên dịch là một chữ dài.

long min = -9223372036854775808L; 
long max = 9223372036854775807L;//Inclusive 
Các vấn đề liên quan