Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc về khi tính toán vượt quá giá trị lớn nhất của kiểu dữ liệu

    Chào các bạn.
    Mình có 1 vấn đề nhỏ sau, khá là căn bản nhưng không hiểu. Bạn nào biết giải đáp giúp mình.
    Mã:
    System.out.println("Gia tri Int lon nhat: " + t1);
    		System.out.println("Gia tri Int lon nhat nhi phan: " + Integer.toBinaryString(t1));
    		System.out.println("Chieu dai gia tri Int lon nhat nhi phan: " + Integer.toBinaryString(t1).length());
    		System.out.println("Gia tri Int lon nhat tang 1: " + t2);
    		System.out.println("Gia tri Int lon nhat tang 1 nhi phan: " + Integer.toBinaryString(t2));
    		System.out.println("Chieu dai gia tri Int lon nhat tang 1 nhi phan: " + Integer.toBinaryString(t2).length());
    		int t3 = t1 + t1;
    		System.out.println("Gia tri Int lon nhat gap doi: " + t3);
    		System.out.println("Gia tri Int lon nhat gap doi nhi phan: " + Integer.toBinaryString(t3));
    		System.out.println("Chieu dai gia tri Int lon nhat gap doi nhi phan: " + Integer.toBinaryString(t3).length());
    Kết quả tính toán là
    Mã:
    Gia tri Int lon nhat: 2147483647
    Gia tri Int lon nhat nhi phan: 1111111111111111111111111111111
    Chieu dai gia tri Int lon nhat nhi phan: 31
    Gia tri Int lon nhat tang 1: -2147483648
    Gia tri Int lon nhat tang 1 nhi phan: 10000000000000000000000000000000
    Chieu dai gia tri Int lon nhat tang 1 nhi phan: 32
    Gia tri Int lon nhat gap doi: -2
    Gia tri Int lon nhat gap doi nhi phan: 11111111111111111111111111111110
    Chieu dai gia tri Int lon nhat gap doi nhi phan: 32
    Bạn nào có thể giải thích cho mình tại sao ?
    Mã:
    Integer.MAX_VALUE + 1 = -2147483648  
    Integer.MAX_VALUE + Integer.MAX_VALUE  =  -2
    Cám ơn trước nhé [IMG]images/smilies/online.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Đang ở
    89 Tam Trinh - Hoàng Mai - Hà Nội
    Bài viết
    0
    Trích dẫn Gửi bởi kenshin47
    Chào các bạn.
    Mình có 1 vấn đề nhỏ sau, khá là căn bản nhưng không hiểu. Bạn nào biết giải đáp giúp mình.
    Mã:
    System.out.println("Gia tri Int lon nhat: " + t1);
    		System.out.println("Gia tri Int lon nhat nhi phan: " + Integer.toBinaryString(t1));
    		System.out.println("Chieu dai gia tri Int lon nhat nhi phan: " + Integer.toBinaryString(t1).length());
    		System.out.println("Gia tri Int lon nhat tang 1: " + t2);
    		System.out.println("Gia tri Int lon nhat tang 1 nhi phan: " + Integer.toBinaryString(t2));
    		System.out.println("Chieu dai gia tri Int lon nhat tang 1 nhi phan: " + Integer.toBinaryString(t2).length());
    		int t3 = t1 + t1;
    		System.out.println("Gia tri Int lon nhat gap doi: " + t3);
    		System.out.println("Gia tri Int lon nhat gap doi nhi phan: " + Integer.toBinaryString(t3));
    		System.out.println("Chieu dai gia tri Int lon nhat gap doi nhi phan: " + Integer.toBinaryString(t3).length());
    Kết quả tính toán là
    Mã:
    Gia tri Int lon nhat: 2147483647
    Gia tri Int lon nhat nhi phan: 1111111111111111111111111111111
    Chieu dai gia tri Int lon nhat nhi phan: 31
    Gia tri Int lon nhat tang 1: -2147483648
    Gia tri Int lon nhat tang 1 nhi phan: 10000000000000000000000000000000
    Chieu dai gia tri Int lon nhat tang 1 nhi phan: 32
    Gia tri Int lon nhat gap doi: -2
    Gia tri Int lon nhat gap doi nhi phan: 11111111111111111111111111111110
    Chieu dai gia tri Int lon nhat gap doi nhi phan: 32
    Bạn nào có thể giải thích cho mình tại sao ?
    Mã:
    Integer.MAX_VALUE + 1 = -2147483648  
    Integer.MAX_VALUE + Integer.MAX_VALUE  =  -2
    Cám ơn trước nhé [IMG]images/smilies/online.gif[/IMG]
    Không quá rõ về Java, nhưng đọc thấy nói ở đây là khi tràn số thì sẽ chỉ giữ lại 32 bits (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.2)

    Giá trị dương lớn nhất của int (32 bits): 0x7F FF FF FF, nếu cộng 1 sẽ là 0x80 00 00 00. Theo biểu diễn số dạng bù 2 thì sẽ ra giá trị âm -2^31

    Phần còn lại giải thích tương tự (và đọc ở đây: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.1).

  3. #3
    mình trước cũng thử làm để xem nếu vượt quá cái giới hạn thì nó sẽ thành cái gì, và câu trả lời là nó chạy lại với số bắt đầu là số nhỏ nhất của loại dạng số đó.
    ví dụ byte có giới hạn là -127=>127 thì nếu bạn tính toán mà nó vượt quá thì nó sẽ chạy lại như :
    a=127;
    a+=1;
    kết quả a=-127

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •