Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Lỗi tràn số có dấu và không dấu trong C?

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    7

    Mặc định Lỗi tràn số có dấu và không dấu trong C?

    Em có đoạn mã sau:

    #include<stdio.h>
    #include<conio.h>
    main()
    { int a=0x7FFF;
    int c=a+a;
    unsigned int b=0x7FFF;
    printf("%d+%d=%d",a,a,c);
    printf("\nb=%u+b=%u=%u",b,b,b+b);
    getch();
    }


    Em muốn hỏi tại sao c là 1 số có dấu thì lẽ ra chỉ có giá trị trong khoảng từ -32768->32767 thôi, mà ở đây c vẫn in ra được giá trị đúng vượt quá giá trị trên mà ko gây ra lỗi tràn số ?

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    578

    Bạn đang dùng trình biên dịch nào ? Nếu là trình biên dịch 32bit thì đương nhiên sẽ không gây ra tràn số với đoạn mã này.
    Mình dùng gcc, thay int bằng short thì thấy có tràn số.

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    \WINDOWS\Assembly\
    Bài viết
    54

    Trích dẫn Nguyên bản được gửi bởi saungon Xem bài viết
    Em có đoạn mã sau:

    #include<stdio.h>
    #include<conio.h>
    main()
    { int a=0x7FFF;
    int c=a+a;
    unsigned int b=0x7FFF;
    printf("%d+%d=%d",a,a,c);
    printf("\nb=%u+b=%u=%u",b,b,b+b);
    getch();
    }


    Em muốn hỏi tại sao c là 1 số có dấu thì lẽ ra chỉ có giá trị trong khoảng từ -32768->32767 thôi, mà ở đây c vẫn in ra được giá trị đúng vượt quá giá trị trên mà ko gây ra lỗi tràn số ?
    Còn phải tùy vào trình biên dịch và cấu trúc hệ thống nữa.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn