目录
常量
在C语言源代码中,有些类型的数据在程序运行前已经预先设定好了的。在整个程序不会发生变化的,称为常量。
#include <stdio.h> #define a 13 int main() { printf("%d", a); }
以上类型的都是常见的几个基本类型。
变量
程序中事先声明了的,指定存储类型的内存值可以变化的。程序员通过变量访问或修改内存中的数据,每一个变量代表了一小块内存,而变量是有名字的,程序对变量赋值,可以存储指定类型的称为变量。
#include <studio.h> int main() { int a; char b; }
以上都可以称之为变量。
常量和变量名的定义规范
只能用数字、字母、下滑线组成的
不能用数字开头
不能用其他特殊的符号
不能使用关键字
#include <stdio.h> int main() { int _1a; // 成立 int _a1; // 成立 int a_1; // 成立 int a1_; // 成立 int 1_a; // 不成立 int 1a_; // 不成立 int *a_; // 不成立(除了上述说的数字、字母、下滑线组成的都不能成为可命名的变量名) }
整数类型(int)
和数学一样,在C语言中,整数时没有小数部分的数。例如1和-1都是整数。像1.0就不是整数。
用于存储整数的变量称为整数变量。整数类型简称为整型。
定义整数类型的标识符号为(int)。
整数数据在内存中以二进制形式存储。按照存储的格式不同,整数可分为有符号和无符号整型,分别在int 前面加signed(可忽略)和unsigned来修饰。有符号整数数据在内存中以补码的形式存储。
#include <stdio.h> int main() { signed int a = 3; // 有符号整形(signed可以省略) unsigned int b = 3; // 无符号整形(unsigned不可省略) printf("%d\n%d", a, b); }
有符号整数类型
5种有符号整数类型所占字节数及数据范围
#include <stdio.h> #include <limits.h> // 里面包含了CHAR_MIN、INT_MIN等宏 int main() { printf("signed char所占字节数:%d,数据范围:[%d|%d]\n", sizeof(signed char), SCHAR_MIN, SCHAR_MAX); printf(" short所占字节数:%d,数据范围:[%d|%d]\n", sizeof(short), SHRT_MIN, SHRT_MAX); printf(" int所占字节数:%d,数据范围:[%d|%d]\n", sizeof(int), INT_MIN, INT_MAX); printf(" long所占字节数:%d,数据范围:[%d|%d]\n", sizeof(long), LONG_MIN, LONG_MAX); printf("long long所占字节数:%d,数据范围:[%d|%d]\n", sizeof(long long), LLONG_MIN, LLONG_MAX); }
signed char所占字节数:1,数据范围:[-128|127]
short所占字节数:2,数据范围:[-32768|32767]
int所占字节数:4,数据范围:[-2147483648|2147483647]
long所占字节数:4,数据范围:[-2147483648|2147483647]
long long所占字节数:8,数据范围:[0|-1]
无符号整数类型
·
类型 同义词 _Bool bool(在stdbool.h头文件种) unsigned char unsigned int unsigned unsigned short unsigned short int unsigned long unsigned long int unsigned long long unsigned long long int
整型变量的溢出
在整数的算术运算中,可能会发生溢出(overflow)。当运算的结果不在数据类型所能表示范围中,就会发生溢出。
#include <stdio.h> #include <limits.h> int main() { int a, b; // 定义变量 a = INT_MAX; // 给变量a赋值一个最大值 b = a + 1; // 在a的值上面加个1,超过最大值 printf("a: %d\nb:%d", a, b); }
a: 2147483647
b:-2147483648运行结果表示,b的值并不是想象中的2147483648。所以写程序处理数据时,要避免数据溢出的现象,很多出你的思维是没有问题,而是数据的定义上会出现问题。所以会出现程序的bug。
溢出的现象是未定义的行为,C语言的标准中并未定义有符号溢出的规则。在编程中有必要注意自己这类问题。
字符类型(char)
char类型用于存储字符(如字母或者标点符号),但是从编译过程来看,其实char类型也是一个标准的整数类型,因为char类型实际上存储的是整型而不是字符。计算机使用的数字编码来处理字符。常用的是ASCII编码。
在ASCII中,存储A实际上存储的是整数65。
标准的ASCII值的范围是1~127。
#include <stdio.h> int main() { char ch = 'A'; printf("字母A的ASCII的值为:%d", ch); }
字母A的ASCII的值为:65 案例——字符变量定义并用字符常量赋值。
#include <stdio.h> int main() { char a = 'A'; char b = 'FATE'; int x = 'FATE'; char ch = 97; printf("a: %c \nb = %c \nx=%x \nch = %c", a, b, x, ch); }
a: A
b = E
x=46415445
ch = a可以从程序上看到,如果字符常量中有多个字符,只有最后8位有效。