C语言回炉之 基本数据类型

数据类型关键字

数据类型关键字 标准 说明
char K&R 字符型(c语言中是最小的整形处理)
short K&R 短整形
int K&R 整形
long K&R 长型
unsighed K&R 无符号
float K&R 浮点数
double K&R 双精度浮点数
signed C90 有符号的
void C90
_Bool C99 布尔值
_Complex C99 复数
_Imaginary C99 虚数‘

修饰整数类型

C语言提供了3个附属关键字修饰基本整数类型:short,long,unsigned。至少应该知道以下几点:

  • short int类型(等同short)占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。与int类似,short默认都是有符号类型。
  • long int类型(等同long)占用的存储空间可能比int多,使用于数值较大的场合。 与int类似,long默认都是有符号类型。
  • long long intlong long(C99标准加入)占用的存储空间可能比long大,适用于更大的数值场合。该类型至少占用64位。与int类似,long long默认都是有符号类型。
  • unsigned intunsigned只能用于非负数场合,这种类型与有符号类型表示的范围不同。例如,16位的unsigned int允许的取值范围是0~65535,而不是-32768~32768.用于表示正负号的位现在用于表示另一个二进制位。所以无符号类型可以表示更大的数。
  • 在C90的标准中。又添加了unsgined long intunsigned longunsigned intunsigned short.C99标准又添加了unsigned long long intunsigned long long.
  • 在任何有符号的类型前面加关键字signed,可以强调使用有符号类型的意图(当然,不加也可以)。例如short,short intsigned short,signed short int都是一样。

printf数据类型占位符

占位符 类型
%d int
%h short
%l long
%c char

占位符后面加d,o,x,u分别对应十进制,八进制,十六进制,无符号。默认十进制(省略d)。例如:

占位符 类型
%ho 八进制short
%hx 十六进制short
%llx 十六进制long long
%llu 无符号 long long

_Bool类型

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true,false。因为C语言用值1表示true,用0 表示false,所以实际上_Bool也是一种整数类型。但原则上值占用1位存储空间,因为1和0对应,1位的存储空间够用了。

可移植类型stdint.h 和 inttypes.h

C99 新增了2个头文件stdint.h 和 inttypes.h以确保C语言的类型在各系统中的功能一致。C语言为现有类型创建更多类型名,这些新的类型名定义在stdint.h头文件中,例如int32_t表示32位有符号整数类型。在使用32位的int系统中,头文件会把int32_t作为int的别名。不同的系统也可以定义相同的类型名。例如int为16位,long为32位的系统会把int32_t作为long的别名。然后使用int32_t编写的程序并且包含stdint.h头文件时,编译器会把int或long替换位与当前系统匹配的类型。

浮点数

C语言的浮点数类型有floatdouble,long double类型。

float

C标准规定,float类型至少需要表示6位有效数字,且取值范围至少在10-37~1037。前一项的规定指的是float类型必须至少精确表示小数点后的6位有效数字,如33.333333。后一项规定用于方便的表示存储太阳的质量(2.0e32),一个质子的电荷量(1.6e-19库伦)或国家债务之类的数字,通常系统存储一个浮点数要占用32位。其中8位用于表示指数的值和符号,剩下的24位用于表示非指数部分(也叫做尾数或有效数)及其符号。

double

C语言提供的另一种浮点数类型是double(意味双精度)。double类型和float类型的最小取值范围相同,但至少必须能够表示10位有效数字。一般情况下,double占用64位而不是32位。一些系统将多出来的全部用来表示非指数部分,这不仅增加了有效数字的位数(即提高了精度)。而且还减少了舍入误差。另一些系统把其中的一些位分配给指数部分,以容纳更大的指数,从而增加了可表述数的范围,无论那种方法,doubl都至少有13位有效数字,超过了标准的最低位数规定。

long double

C语言的第三种浮点类型是long double,以满足比double类型更高的精度要求,不过C值保证long double 至少与double保持相同的精度。

复数和虚数类型

C99标准类型支持复数类型和虚数类型,但是有所保留。C11标准把整个复数软件包都作为可选项。

C语言有3中复数类型:float _Complex,double _Complexlong double _Complex。例如float _Complex类型的变量应该包含2各float类型的值,分别表示复数的实部和虚部。类似地,C语言的3钟虚数类型分别为float _Imaginary,double _Imaginarylong double _Imaginary

案例demo

#include<stdio.h>

int main(void){
	const int price = 1700;
	const double turn = 14.5833;
	
	char c= 'C';
	
	float weight,value;
	int x=10,y=100;
	short b=12;
	unsigned long long ago =111111111111;
	
	printf("你是否知道你的体重转换为白金的价格?\n");
	printf("让我们一起来计算一下你的白金价格\n");
	printf("请告诉我们你的体重(磅)\n");
	scanf("%f",&weight);
	value = price * weight * turn;
	printf("您的体重转换为白金价格为%.2f \n",value);
	printf("请按Enter退出体重白金价格计算.\n");
	printf(getchar()+"\n");
	
	printf("dec=%d ;octal = %o ; hex = %x ;\n",x,x,x);
	printf("dec=%d ;octal = %#o ; hex = %#x ;\n",x,x,x);
	
	printf("dec short Example %hd \n",b);
	printf("octal short Example %hx \n",b);
	printf("hex short Example %ho \n",b);
	printf("在%llu之前\n",ago);
	
	printf("字符对应整数 %d",c);
	
	/*C99 为类型大小提供%zd转换说明*/
	printf("Type int has a size of %zd bytes.\n", sizeof(int));
	printf("Type long has a size of %zd bytes.\n", sizeof(long));
	printf("Type short has a size of %zd bytes.\n", sizeof(short));
	printf("Type char has a size of %zd bytes.\n", sizeof(char));
	printf("Type long long has a size of %zd bytes.\n", sizeof(long long));
	printf("Type float has a size of %zd bytes.\n", sizeof(float));
	printf("Type double has a size of %zd bytes.\n", sizeof(double));
	printf("Type long double has a size of %zd bytes.\n", sizeof(long double));
	
	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/weixin_43430036/article/details/85066657
今日推荐