2.2.3 Không phải chỉ có int là kiểu số nguyên (3)

long và short không được phép sử dụng kết hợp với kiểu char (tại sao?) và không được phép sử dụng cùng một lúc với một khai báo đơn. Nhưng không có gì ngăn cản chúng ta sử dụng unsigned với một biến kiểu char. Chúng ta sẽ có gì từ một khai báo kiểu như thế ?

Đừng quên rằng chúng ta không được phép bỏ qua từ char. Hầu hết các trình biên dịch hiện nay sử dụng giả định rằng các ký tự được lưu trữ bằng cách sử dụng 8 bit (1 byte).  Nó có thể đủ để lưu trữ một giá trị nhỏ như số tháng hoặc thậm chí là ngày của tháng. Nếu chúng ta đối xử với biến kiểu char biến kiểu int, phạm vi của nó sẽ là [-128 ~ 127].

Nếu chúng ta không cần bất kỳ giá trị ký âm nào thì phạm vi của nó chuyển sang [0 ~ 255]. Nó có thể đủ cho nhiều applications và cũng có thể dẫn đến tiết kiệm đáng kể trong việc sử dụng bộ nhớ.

Bây giờ chú ý đến điều này: từ trước đến giờ chúng ta đã sử dụng số nguyên literals, hầu hết chúng có kiểu int. Nhưng trong một số trường hợp trình biên dịch sẽ nhận ra literals kiểu long. Điều này sẽ xảy ra nếu:

  • một giá trị literal đi vượt ra ngoài phạm vi chấp nhận được của kiểu int;
  • một chữ L hoặc l được gắn vào số, ví dụ như 0L hoặc 1981l – cả 2 literals này đều có kiểu là long.