PDA

View Full Version : [Q] chỉ giùm mình về c



lqthai80
12-10-2002, 14:05
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 !

danceswithwolves
13-10-2002, 11:27
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.

madcat
15-10-2002, 14:08
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õ

lqthai80
17-10-2002, 11:46
mình hiểu rồi, cám ơn danceswithwolves và madcat.
rất cám ơn!!!!!!!