整数的类型(4)整数的格式化及整数类型选择

发布时间 2023-11-12 17:50:06作者: 瑜阳

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

————实际应用并不需要细致区分:

1.无特殊需要,就选择int;
2.unsigned与否只是输出不同,内部计算是一样的