前言
C语言基本数据类型包括声明变量、如何表示字面值常量,以及经典的用法。
一、int类型
C语言中包括许多的整数类型,在不同是情况可以选择不懂的数据类型。而且C语言中整数类型可以便是不同的取值范围和正负值。int类型是有符号整型,必须是整数,可以使正整数、负整数或者零。取值访问根据计算机系统来定。一般而言,存储一个int要占据一个机械字长。
格式:int + 变量名+分号
int ans;
int gen,cows,gaots;
以上声明是创建的变量,未提供值。其可以直接赋值或者采用函数来赋值。
1.2初始化变量
初始化(initialize)变量就是为变量赋一个初始值。其可以在声明变量时完成。如:
int ans=100;
int cows=10,fla=24
C语言中将不含小数点和指数的数作为整数。
可以采用printf()函数打印int类型的值。%d指明了在一行中打印整数在位置,%d称为转换说明,它指定了prinf()应使用什么格式来显示一个值。
二、八进制和十六进制
8和16是2是幂,其计数系统在表达与计算机相关的值时更加方便。在C语言中,用特定是前缀表示哪种进制。0x或0X前缀表示十六进制。0前缀表示八进制
十进制显示数字,使用%d;
八进制显示数字,使用%o;
十六进制显示数字,使用%x;
显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。其中在八进制和十六进制前显示0和0x前缀,要分别在转换说明中加入#
C语言提供了3个附属关键字修饰基本整数类型:short、long和unsigned.
打印unsigned int 类型的值,使用%u转换说明;
打印 long 类型的值,使用%ld转换说明。如果系统中int 和long 的大小相同,使用%d转换说明(但是一般可以移植)。
%lx表示十六进制格式打印long类型整数;
%ho表示以八进制格式打印long类型整数。
注意:C语言中允许使用大写或小写的常量后缀,但是在转换说明中只能用小写。
%hd表示以十进制显示short类型的整数;
%ho表示以八进制显示short类型的整数。
h和l 前缀都可以和u一起使用,用于表示无符号类型。
%lu表示打印unsigned long类型的值。
%lld表示有符号类型;
%llu表示无符号类型。
char类型用于存储字符,从计数层面看,char是整数类型,因为char类型实际上存储的是整数而不是字符,计算机使用数字编码来处理字符,即用特定的 整数表示特定的字符。一般采用ASCII编码。
4.2 char 类型声明变量
char temp;
char ten,ptem;
在C语言中,用单引号括起来的单个字符被称为字符常量(character constant)
char temp; //声明一个char类型的变量
temp='a'; //为赋值,正确的赋值
temp=a; //错误,此时a是一个变量
temp="a"; //错误,此时"a"是一个字符串
字符是以数值形式存储的,故也可以使用数字代码值类赋值
单引号值适用于字符、数字和标点符号。但是ASCII中有些字符打印不出来,在C语言中提供了3中方法表示这些字符:
方法1:一一使用ASCII码
方法2:使用特殊的符号序列表示一些特殊的字符。这些字符序列叫作转义序列(escape sequence)。把转义序列赋给字符变量时,必须用单引号把转义序列括起来。
转义序列表
下面对转义序列进行介绍。
C90新增的警报字符(\a)是否能产生听到或看到的警报,取决于计算机的硬件,蜂鸣是最常见的警报(在一些系统中,警报字符不起作用)。
C标准规定警报字符不得改变活跃位置。标准中的活跃位置(active position)指的是显示设备(屏幕、电传打字机、打印机等)中下一个字符将出现的位置。简而言之,平时常说的屏幕光标位置就是活跃位置。在程序中把警报字符输出在屏幕上的效果是,发出一声蜂鸣,但不会移动屏幕光标。
接下来的
转义字符\b、\f、\n、\r、\t和\v是常用的输出设备控制字符。
换页符(\f)把活跃位置移至下一页的开始处;
换行符(\n)把活跃位置移至下一行的开始处;
回车符(\r)把活跃位置移动到当前行的开始处;
水平制表符(\t)将活跃位置移至下一个水平制表点(通常是第1个、第9个、第17个、第25个等字符位置);
垂直制表符(\v)把活跃位置移至下一个垂直制表点。
其中这些转义序列字符不一定在所有的显示设备上都起作用。例如,换页符和垂直制表符在PC屏幕上会生成奇怪的符号,光标并不会移动。只有将其输出到打印机上时才会产生前面描述的效果。
转义序列(\\、\'、\")用于打印\、'、"字符(由于这些字符用于定义字符常量,是printf()函数的一部分,若直接使用它们会造成混乱)。如果打印下面一行内容:
Gramps sez, "a \ is a backslash."
应这样编写代码:
printf("Gramps sez, \"a \\ is a backslash.\"\n");
最后两个转义序列(\0oo和\xhh)是ASCII码的特殊表示。如果要用八进制ASCII码表示一个字符,可以在编码值前面加一个反斜杠(\)并用单引号括起来。例如,如果编译器不识别警报字符(\a),可以使用ASCII码来代替:
beep = '\007';
可以省略前面的0,'\07'甚至'\7'都可以。即使没有前缀0,编译器在处理这种写法时,仍会解释为八进制。
从C90开始,不仅可以用十进制、八进制形式表示字符常量,C语言还提供了第3种选择——用十六进制形式表示字符常量,即反斜杠后面跟一个x或X,再加上1~3位十六进制数字。例如,Ctrl+P字符的ASCII十六进制码是10(相当于十进制的16),可表示为'\x10'或'\x010'。
int系列类型的常量写法实例
_Bool 类型用于便是布尔值,即逻辑值true和false.在C语言中用1表示true,用0表示false,所以_Bool类型实际上也是一种整数类型,但原则上仅占用1位存储空间,
可移植类型:stdint.h和unttypes.h是为了确保C语言的类型在各系统中功能相同。
int32_t表示32位的有符号整数类型;
int_least8_t是可容纳8位有符号整数值的类型中宽度最小的类型的一本别名;
int_fast8_t被定义为系统中对8位有符号值而言运算最快是整数类型的别名;
intmax_t表示最大有符号整数值。
/* altnames.c -- 可移植整数类型名 */
#include
#include // 支持可移植类型
int main(void)
{
int32_t me32; // me32是一个32位有符号整型变量
me32 = 45933945;
printf("First, assume int32_t is int: ");
printf("me32 = %d\n", me32);
printf("Next, let's not make any assumptions.\n");
printf("Instead, use a \"macro\" from inttypes.h: ");
printf("me32 = %" PRId32 "\n", me32);
return 0;
}