首页 > 技术文章 > C语言数据类型、运算符,表达式

Lance-WJ 2020-07-09 17:25 原文

数值型数据知识点

1、标识符:有字母数字下划线三种字符组成,第一个字符为字母或下划线

2、d%:格式化标记,表示显示一个十进制数

3、八进制数字:以0开头,八进制的12就是012,(012)8 = (10)10

4、十六进制数字:以0x开头

5、无符号型比一般整形中的数据范围扩大一倍

注意,无符号型不能存负数

6、sizeof:能确定某一类型变量所占的内存是多少(目的是为了看某种类型变量在计算机内存中占多少个字节)

7、浮点数在内存中以指数形式存在着

数值类型 16位 32位 64位
float(一般提供7位有效数字,保守估计6位) 4 4 4
double(一般提供15到16位有效数字,保守估计15) 8 8 8

8、断点调试(VS):停在这一行不是执行这一行,要执行这一行。F9

字符型数据类型知识点

字符型数据:

字符种类 解释
常规字符 用单引号引起来的一个字符'a'
特殊字符 转义字符,一\开头的字符序列(\n:换行)

字符常量:

  只能保存一个字符,因为一个字符型变量存在内存中只占一个字节

char c1,c2,c3;
c1 = 'a';  //实际上是把字符对应的ASCII码放到了变量所代表的内存中去
c2 = '\'';

 注意:c%以字符形式输出

字符串常量:

  用一堆双引号引起来的一堆字符(可以是一个字符,也可以说是多个字符)

c = 'a'; // 字符常量,只有a一个字节
c = "a"; //字符串常量,有a和\0 两个字节

  注意:变量先定义后使用

数值间运算(数值型数据间的混合运算)

  由低到高(int->unsigned(char,short)->long->double(float))

  注意:->代表的是转化符

1、算术运算符 /(除,两整数相除,系统会舍弃小数部分) %(取余,也叫模运算符,该运算符两侧都要求为整数)

2、优先级问题:先乘除,后加减;如果优先级相同,从左到右结合;如果搞不懂优先级,那么就用()运算符把需要优先计算的内容括起来。

3、强制类型转换运算符:将一个表达式转换成所需要的类型:

int a = 10;
double b;
b = (double)a; //a本身类型并没有发生变化,而是赋值之后的变量b所存值的类型发生变化

总结强制类型转换运算符的一般形式:(类型名)(表达式)

eg: (int)(x+y)和(int)x+y的区别,前者是将x+y的值转换成整型,后者只是将x的值转换成整型

  两种类型转换:

    1、自动类型转换,系统替你转换数据类型

    2、强制类型转换,当自动类型转换无法达到目的时,就是用强制类型转换

4、自增自减操作

  ++(自增) --(自减)

  自增自减操作符只能作用于变量,不能用于常量和表达式

  当自增自减运算符在变量后面,对于该自增自减表达式的使用时,先用后加,反之先加后用。

printf("i++的结果是%d",i++); // 先用后加,i++的结果是6,i的值本身变成7
printf("++i的结果是%d",++i); // 先用后加,++i的结果是7,i的值本身变成7

  表达式:可以理解为 + - * / 串起来的一个式子

  C编译器在处理时,会尽可能多的从左到右将若干个字符组成一个运算符

5、赋值运算符和赋值表达式: = 讲等号右边的值赋值给等号左边的变量,给变量一个值,或者是改变变量到某一个值

char a; //变量定义,系统会给a分配一个字节的内存,内存里面的值不确定
char a =90; //变量定义,同时把变量赋值处置(初始化变量),数值范围是-128-127
// 若赋值时溢出,则溢出后变量里面的内容也就变得不可预料

赋值原则:类型不同需要用到强制类型转换,当用强制类型转换时,开发者必须明确知道不会溢出。

  复合的赋值运算符:在赋值运算符=前加上其他运算符,构成了复合的赋值运算符(复合的赋值运算符两个运算符之间必须紧挨着,不能用空格分开)

  ①、如果*=(优先级低)右侧是个表达式的话,则相当于表达式有括号

  ②、赋值表达式其本身也是有值的

③、赋值运算符具有从右到左

6、逗号运算符和逗号表达式:

  逗号运算符:将两个表达式链接起来,逗号运算符他的优先级是最低的。

  格式:表达式1,表达式2

  求解过程:先求解表达式1的值,再求解表达式2的值,整个表达式的值是2的值

int a;
a = (145,68) //a的值为14
    
a = 3*5,a*4; //整个值是60,a的值变成了15

推荐阅读