Hiển thị kết quả từ 1 đến 4 / 4
  1. #1
    Tham gia
    16-08-2002
    Location
    vung tau
    Bài viết
    12
    Like
    0
    Thanked 0 Times in 0 Posts

    [Q] chỉ giùm mình về c

    mình chỉ mới học về c trong trường, mình có một thắc mắc này :
    mình có một chương trình c đơn giản sau:
    #include <stdio.h>
    #include <conio.h>
    main()
    {char x,y,z;
    x=24;y=105;
    z=x+y;
    printf("%d",z);
    getch();
    };
    khi cho chạy chương trình thì kết quả không cho ra 129 mà ra một số âm, mình biết là khai biến z sai kiểu dữ liệu và mình đoán là biến z bị tràn ô nhớ , nhưng mình vẫn không phân tích ra được, mong các bạn giải thích dùm mình(theo cách phân tích kiểu bit ) nhé!
    Xin chân thành cám ơn !
    Quote Quote

  2. #2
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    kiểu char (1 byte - mang 2^8 = 256 giá trị) mặc định là signed (có dấu) nên khi cast về numeric thì có giá trị nguyên giới hạn trong đoạn [-128, 127].

    với kiểu (signed) char, bit 8 là bit dấu, 7 bits còn lại quy định 2^7 = 128 giá trị cho dấu tương ứng :
    + Các giá trị từ 00000000 -> 01111111 quy định các giá trị dương từ 0 đến 127.
    + Các giá trị từ 10000000 -> 11111111 quy định các giá trị âm từ -128 đến -1 (chú ý : 10000001 ~ -127, 10000010 ~ -126 v.v...).

    ở chương trình của bạn (z là char) :
    : x + y = z
    hệ 10 : 105 + 24 = 129
    hệ 2 : 01101001 + 00011000 = 10000001

    giá trị nhận được là 10000001 (chú ý bit dấu là bit 8), khi cast về decimal (%d) sẽ được hiểu là -127.

  3. #3
    Tham gia
    01-10-2002
    Bài viết
    38
    Like
    0
    Thanked 0 Times in 0 Posts
    kiểu char có miền giá trị nằm trong khoảng -128 - 127 , kết quả bạn tính ra đã vượt quá miền giá trị của char, không ra là phải, chuyển sang unsigned char ,hoặc int sẽ ra kết quả đúng, Giải thích tại sao thì của dww là quá rõ

  4. #4
    Tham gia
    16-08-2002
    Location
    vung tau
    Bài viết
    12
    Like
    0
    Thanked 0 Times in 0 Posts

    cám ơn

    mình hiểu rồi, cám ơn danceswithwolves và madcat.
    rất cám ơn!!!!!!!

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •