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 ạ!!

nohat viết 01:20 ngày 01/10/2018

đô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.

Văn Dương viết 01:19 ngày 01/10/2018

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.

Bé tập Code viết 01:12 ngày 01/10/2018

Khai báo char bình thường thì mặc định là unsigned char

Hầu hết các compiler mặc định charsigned chứ không phải unsigned để nó giống với việc intsigned int. Nói chung dấu mắc định của char 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.

Văn Dương viết 01:16 ngày 01/10/2018

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.

Bé tập Code viết 01:17 ngày 01/10/2018

Trong C qui định int nhỏ nhất là 16 bit, bất kể Compiler.

Văn Dương viết 01:12 ngày 01/10/2018

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 & ???

Bé tập Code viết 01:15 ngày 01/10/2018

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).

Văn Dương viết 01:21 ngày 01/10/2018

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.

Tạ Duy Hoàng viết 01:13 ngày 01/10/2018

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

Nguyễn Đức Anh viết 01:13 ngày 01/10/2018

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

Bài liên quan
0