30/09/2018, 23:08
Vấn đề kiểu char và int
Dạ em là newbie, Em có học C trên youtube của anh Đạt, có một điều em thắc mắc là khi khai báo int a=‘a’; và printf thì ra số 97, nhưng khi em dùng scanf rồi nhập a từ bàn phím thì lại ra một dãy số dài, dạ em muốn hỏi lí do và hỏi thêm char có phải thực chất là số ko ạ!!
Bài liên quan
đôi khi bạn diễn đạt bằng từ ngữ có thể ko chính xác vấn đề đang gặp, vậy nên hỏi gì thì post kèm code lên cho mọi người dễ hình dung.
char là một kiểu biến có độ dài 8 bit. Khai báo char bình thường thì mặc định là unsigned char, có miền giá trị từ 0-255. signed char có giá trị -127 đến 127.
int là biến có độ dài 8,16,32,64 bit tuỳ thuộc vào hệ điều hành.
Hầu hết các compiler mặc định
char
làsigned
chứ không phảiunsigned
để nó giống với việcint
làsigned int
. Nói chung dấu mắc định củachar
có thể thay đổi linh động được.[quote=“Duong_Act, post:3, topic:32366”]int là biến có độ dài 8,16,32,64 bit tuỳ thuộc vào hệ điều hành.
[/quote]
int
trong chuẩn C không bao giờ có độ dài 8bit.Mình đã lập trình ngôn ngữ C cho một con chip 8bit. IDE và compiler nó hiểu int là 8bit. Các ide và compiler khác thì khác. Nhưng rõ ràng int là 8 bit là có thực.
Trong C qui định
int
nhỏ nhất là 16 bit, bất kể Compiler.Mặc dù đó là quy định nhưng trong thực thế các compiler có thể vẫn có những điểm không tuân theo quy định. Tuy nhiên thì ta vẫn phải chấp nhận và lưu tâm đến điểm khác biệt đó. Ta cũng không thể nói rằng compiler đó không phải là compiler cho C hay ngôn ngữ ta đang dùng không phải là C được.
int là 8bit cũng chỉ là một trong số ngoại lệ không theo chuẩn đó thôi. Mình còn gặp trường hợp lấy địa chỉ của mảng không cần dấu & ???
Có thể nói đó không phải compiler cho C và bỏ nó đi nếu học C (nếu nó có tồn tại trên đời).
Nhưng biết làm thế nào được ? Nó lại là thằng ngon nhất trong đám cùng chức năng ? Không lẽ ASM thì chết.
https://voer.edu.vn/m/cac-kieu-du-lieu-trong-cc/e605e744
Trong đây nó có giải thích bạn có thể đọc. int là 2 byte và 1 byte = 8 bit. Còn các thứ khác bạn tự đọc. Mình hiểu nó in giá trị mã trong bảng ASCII của ký tự a ra kết quả như vậy
Cái char này mình thấy cũng nhiều vấn đề không rõ lắm, char trong Linux
được mã hóa bằng UTF-8, cho nên nếu cậu gán 1 kí tự Unicode vào thì nó sẽ
có mã binary là byte cuối cùng của đoạn mã hóa. Còn window thì mình không
biết