04 C基础(数据类型)

mac2024-04-07  34

文章目录

数据类型常量与变量进制内存数值存储方式sizeof关键字整型:int字符型:char实型(浮点型):float、double类型限定符字符串格式化输出和输入

数据类型

常量与变量

关键字 32

数据类型关键字

基本数据类型(5个)

void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果char :字符型类型数据,属于整型数据的一种int :整型数据,通常为编译器指定的机器字长float :单精度浮点型数据,属于浮点数据的一种double :双精度浮点型数据,属于浮点数据的一种

类型修饰关键字(4个)

short :修饰int,短整型数据,可省略被修饰的int。long :修饰int,长整形数据,可省略被修饰的intsigned :修饰整型数据,有符号数据类型unsigned :修饰整型数据,无符号数据类型

复杂类型关键字(5个)

struct :结构体声明union :共用体声明enum :枚举声明typedef :声明类型别名sizeof :得到特定类型或特定类型变量的大小

存储级别关键字(6个)

auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

流程控制关键字

跳转结构(4个)

return :用在函数体中,返回特定值(或者是void值,即不返回值)continue :结束当前循环,开始下一轮循环break :跳出当前循环或switch结构goto :无条件跳转语句

分支结构(5个)

if :条件语句,后面不需要放分号else :条件语句否定分支(与if连用)switch :开关语句(多重分支语句)case :开关语句中的分支标记default :开关语句中的“其他”分支,可选。

循环结构(3个)

for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2…循环,其中2为循环条件。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行do :do循环结构,do 1 while(2); 的执行顺序是1->2->1…循环,2为循环条件while :while循环结构,while(1) 2; 的执行顺序是1->2->1…循环,1为循环条件

数据类型

基本类型

整形 : int, short, long

字符型: char

实型(浮点型)

单精度实型: float双精度实型: double

构造类型

数组类型结构类型: struct联合类型: union枚举类型: enum

指针类型: char *, int *, int **等

常量: 在程序运行过程中,其值不能被改变的量; 常量一般出现在表达式或赋值语句中

变量: 在程序运行过程中,其值可以改变; 变量在使用前必须先定义,定义变量前必须有相应的数据类型

命名规则

标识符不能是关键字标识符只能由字母、数字、下划线组成第一个字符必须为字母或下划线标识符中字母区分大小写

变量特点

变量在编译时为其分配相应的内存空间可以通过其名字和地址访问相应内存

声明和定义区别

声明变量不需要建立存储空间,如:extern int a ; extern 关键字只做声明,不能做任何定义,声明一个变量a,a在这里没有建立存储空间,没有空间,就不可以赋值定义变量需要建立存储空间,如:int b;#define : 声明了一个常量常量的值一旦初始化不可改const int : //定义一个const常量,常量的值不能改变

进制

二进制

进位规则是“逢二进一”,借位规则是“借一当二”

数据在计算机中主要是以补码的形式存储的。

存储

bit(比特) 一个二进制代表一位,一个位只能表示0或1两种状态。数据传输是习惯以“位”(bit)为单位。Byte(字节) 一个字节为8个二进制,称为8位,计算机中存储的最小单位是字节。数据存储是习惯以“字节”(Byte)为单位。

十进制转化二进制

整数: 十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果小数: 小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果,几位小数就需要几位

八进制

Octal,缩写OCT或O,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。

八进制转二进制

八进制一位对应二进制三位1, 2, 4

十进制转八进制

十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

十六进制

由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9,A-F对应10-15

十六进制转二进制

十六进制一位对应二进制四位8, 4, 2, 1

十进制转化十六进制

用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果。

C 表示相应进制数

十进制 以正常数字1-9开头,如123八进制 以数字0开头,如0123十六进制 以0x开头,如0x123二进制 C语言不能直接书写二进制数printf中输出一个十进制数那么用%d,八进制用%o,十六进制是%x

内存数值存储方式

原码

最高位做为符号位,0表示正,为1表示负其它数值部分就是数值本身绝对值的二进制数负数的原码是在其绝对值的基础上,最高位变为1两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,原码不便于加减运算

反码

对于正数,反码与原码相同对于负数,符号位不变,其它部分取反(1变0,0变1)

补码

在计算机系统中,数值一律用补码来存储

统一了零的编码将符号位和其它位统一处理将减法运算转变为加法运算两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃

对于正数,原码、反码、补码相同

对于负数,其补码为它的反码加1

补码符号位不动,其他位求反,最后整个数加1,得到原码

sizeof关键字

sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节sizeof的返回值为size_tsize_t类型在32位操作系统下是unsigned int,是一个无符号的整数

整型:int

整型变量的定义和输出

%d 输出一个有符号的10进制int类型%o(字母o) 输出8进制的int类型%x 输出16进制的int类型,字母以小写输出%X 输出16进制的int类型,字母以大写写输出%u 输出一个10进制的无符号数

整型变量的输入

scanf("%d", &a);

short、int、long、long long

short(短整型) 2字节int(整型) 4字节long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位)long long(长长整形) 8字节需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能短于 int 类型。当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

定义与打印

10 代表int类型 %d 输出int类型10l, 10L 代表long类型 %l 输出long类型10ll, 10LL 代表long long类型 %ll 输出long long类型10u, 10U 代表unsigned int类型 %u 输出unsigned int类型10ul, 10UL 代表unsigned long类型 %lu 输出unsigned long类型10ull, 10ULL 代表unsigned long long类型 ; %llu 输出unsigned long long类型%hu 输出unsigned short类型%hd 输出short类型

有符号数和无符号数区别

有符号数 :有符号数是最高位为符号位,0代表正数,1代表负数

short 2字节 -32768 到 32767 (-2^15 ~ 2^15-1)int 4字节 -2147483648 到 2147483647 (-2^31 ~ 2^31-1)long 4字节 -2147483648 到 2147483647 (-2^31 ~ 2^31-1)

无符号数 :无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数

unsigned short 2字节 0 到 65535 (0 ~ 2^16-1)unsigned int 4字节 0 到 4294967295 (0 ~ 2^32-1)unsigned long 4字节 0 到 4294967295 (0 ~ 2^32-1)

字符型:char

字符变量的定义和输出

字符型变量用于存储一个单一字符,每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(’ ')把字符括起来。字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型。scanf("%c", &ch);printf(“ch = %c\n”, ch);

ASCII对照表 详细

ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。数字 127 代表 Del 命令。

转义字符

\a 警报\b 退格(BS) ,将当前位置移到前一列\f 换页(FF),将当前位置移到下页开头\n 换行(LF) ,将当前位置移到下一行开头\r 回车(CR) ,将当前位置移到本行开头\t 水平制表(HT) (跳到下一个TAB位置)\v 垂直制表(VT)\ 代表一个反斜线字符""’ 代表一个单引号(撇号)字符" 代表一个双引号字符? 代表一个问号\0 数字0\ddd 8进制转义字符,d范围0~7\xhh 16进制转义字符,h范围0-9,a-f,A-F

数值溢出

当超过一个数据类型能够存放最大的范围时,数值会溢出。

有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失。

char 1字节 -128到 127(-2^7 ~ 2^7-1)unsigned char 1字节 0 到 255(0 ~ 2^8-1)

实型(浮点型):float、double

实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的; double型变量所表示的浮点数比 float 型变量更精确单精度浮点数(float): float 4字节 7位有效数字双精度浮点数(double): double 8字节 15~16位有效数字由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型

类型限定符

extern 声明一个变量,extern声明的变量没有建立存储空间。extern int a;const 定义一个常量,常量的值不能修改。const int a = 10;volatile 防止编译器优化代码register 定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就生效,如果没有空闲寄存器,那么register无效。

字符串格式化输出和输入

字符串常量

字符串是内存中一段连续的char空间,以’\0’(数字0)结尾。字符串常量是由双引号括起来的字符序列,如“china”、“C program”,“$12.5”等都是合法的字符串常量。

printf函数和putchar函数

printf是输出一个字符串

格式类型%dint; 接受整数值并将它表示为有符号的十进制整数%hdshort int; 短整数%huunsigned short; 无符号短整数%ounsigned int; 无符号8进制整数%uunsigned int; 无符号10进制整数%x,%Xunsigned int; 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF%ffloat; 单精度浮点数%lfdouble; 双精度浮点数%e,%Edouble; 科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写%cchar; 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符%schar *; 字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符)%pvoid *; 以16进制形式输出指针%%%; 输出一个百分号l(字母l)附加在d,u,x,o前面,表示长整数左对齐m(代表一个整数)数据最小宽度0(数字0)将输出的前面补上0直到占满指定列宽为止不可以搭配使用-m.n(代表一个整数)m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

putchar输出一个char

scanf函数与getchar函数

getchar是从标准输入设备读取一个char; ch1 = getchar();scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据; scanf("%c", &ch3)
最新回复(0)