<1>整数的输入和输出
(1)只有两种形式int 或 long long
- %d:int;
- %u:unsigned;
- %ld:long long;
- %lu:unsigned long long;
举例:通过一段代码输出整数为unsigned的结果
#include<stdio.h>
int main(){
int i=-1;
char c=-1;
printf("i=%u,c=%u",i,c);
return 0;
}
输出结果为i=4294967295,c=4294967295.两个数均为unsigned的int所能表达的最大值;
注意:1.char和int得出结果相同,是因为我们把所有小于int的变量传入printf的时候,我们的编译器会将其转换为int传进去;
2.这与其在计算机内部存在的方式没有关系,仅取决于是否以正确的方式格式化输出;
<2>8进制与16进制
一个以0开始的数字字面量为8进制;
一个以0x开始的数字字面量为16进制;
举例:输入一段代码
#include<stdio.h>
int main(){
int i=012;(以0开始,为8进制)
char c=0x12;(以0x开始,为16进制)
printf("i=%d,c=%d",i,c);注意:这里输出为%d表示输出结果为十进制
return 0;
}
输出结果是i=10,c=18;
注意:我们所见的进制表示方式并不是计算机内部的进制表达方式,计算机内部永远都是二进制,一切都依靠编译器进行转换;
%d输出的整数类型为十进制;%o:输出八进制;%x输出十六进制;
以一段代码举例:
1)#include<stdio.h>
int main(){
int i=012;
char c=0x12;
printf("i=%o,c=%x",i,c);
return 0;
}得出结果为i=12,c=12;
2)涉及到字母大小写的问题:
#include<stdio.h>
int main(){
int i=012;
char c=0x12A;
printf("i=%o,c=%x",i,c);——在此处%x中x为小写,输出c的结果中A便为小写;若%X中X为大写,输出c的结果中A便为大写
return 0;
注意:1.八进制与十六进制只是如何把数字表达成字符串,与内部如何表达数字无关;
2.同时八进制与十六进制不仅能在输出printf中使用,在scanf输入中一样可以使用,意味将输入数据当作八进制或者十六进制读入;
(2)补充:
二进制与十六进制的关系:由2^4=16可知四位二进制正好是一个十六进制位;
举例:
- 0001-四个二进制位-(一个十六进制位,表达1)同理:0010(一个十六进制位,表达2),而十六进制的两位(如1 2)可以表达一个char;
- 同理八进制的一位数字刚好可以表达三位二进制;
<3>整数类型的选择
整数类型多样是因为早期的语言需要准确表达计算机里的数据(内存,寄存器,接口16bit)
————实际应用并不需要细致区分: