WHCSRL 技术网

C语言基础:常量、运算符

第三章 常量

常量

  1. 常量在程序期间是不允许改变的
  2. 常量可以是任何的基本数据类型(整型、浮点型、字符型、枚举型)
  3. 定义后不能进行修改

常量类型

整数常量

  1. 十进制
  2. 八进制:0123
  3. 十六进制:0x123,0X123

浮点常量

  1. 小数
  2. 指数

字符常量

  1. 单引号中单字符,如 'a'
  2. 转义字符也是字符常量,如 ' '

字符串常量

  1. 双引号:" "
  2. 双引号中可以包含:普通字符 a 或者 abc,转义字符 , 空格a b
  3. 字符常量是数组=

常量语法

  1. 宏定义

    #define 常量名 常量值

  2. const关键字定义

    const 数据类型 常量名 = 常量值;

  3. const#define 的区别

    • const 定义常量需要类型,而 define 不需要
    • const 在编译、运行的时候起作用,而 define 是在编译的预处理阶段起作用
    • const 常量可以调试,但 define 不能进行调试
    • const 不能重定义,即不可以定义两个一样的,但 define可以,通过 undef 取消即可重新定义
    • define 可以配合 #def,#ifnef,#endif 使用
    • define 只是简单的替换
    #include<stdio.h>
    #define a 3
    #define b a+1
    #define c a/b*3
    int main(){
    	printf("a = %%d
    ", a);
    	printf("b = %%d
    ", b);
    	printf("c = %%d", c);  // c = 3 / 3 + 1 * 3 = 4
    	return 0;
    }
    
    
    结果:
    a = 3
    b = 4
    c = 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

第四章 运算符

算术运算符

  1. 正号:+
  2. 负号:-
  3. 加号:+
  4. 减号:-
  5. 乘号:*
  6. 除号:/
  7. 取模(取余):%%
  8. 自增:++
  9. 自减:–

注:

  1. 自增自减分为前自增自减 ++a--a,后自增自减 a++, a--

  2. 前++:先自增后赋值,前-- 同理

  3. 后++:先赋值后自增,后-- 同理

  4. 前增后增只有一个时,都是增 1,如 a=1; a++ -> a=2 或者 ++a -> a=2

    #include<stdio.h>
    int main(){
    	int a = 10;
    	int b = 10;
    	printf("---前自增---");
    	printf("先自增:a=%%d
    ", ++a); // 等同于 n = a + 1 
    	printf("自增后的值:a=%%d
    ", a); // 等同于 a = n 
    	printf("---后自增---"); 
    	printf("先赋值:b=%%d
    ", b++); 
    	printf("后自增:b=%%d
    ", b); // 等同于 b = b + 1 
    	return 0;
    }
    
    
    
    结果:
    ---前自增---先自增:a=11
    自增后的值:a=11
    ---后自增---先赋值:b=10
    后自增:b=11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  5. 整数除法会舍弃小数部分,如 99/10=9,不论小数部分有多大,直接省略掉

关系运算符

  1. 等于:==
  2. 不等于:!=
  3. 大于:>
  4. 小于:<
  5. 大于等于:>=
  6. 小于等于:<=

注:

  1. 关系运算符的结果只有真、假两种结果,真的是非零,假的等于 0
  2. 关系运算符常用在 if 结构语句,或者循环语句中
  3. 等于是:==,赋值是:=

逻辑运算符

  1. 与:&&
  2. 或:||
  3. 非:!

注:

  1. 同关系运算符一样,结果也只有两种,一种为真、一种为假
  2. 短路现象,这种情况出现在 &&|| 两种逻辑运算符中
    • &&a && b, 如果 a 为假,后面的就不用进行判断了,因为在与运算中“一假全假”
    • ||a || b ,如果 a 为真,后面的也同样不需要进行判断,因为在或运算中“一真全真”

赋值运算符

  1. = ---> a = 1
  2. -= ---> a -= 1 ---> a = a - 1
  3. += ---> a += 1 ---> a = a + 1
  4. *= ---> a *= 1 ---> a = a * 1
  5. /= ---> a /= 1 ---> a = a / 1
  6. %%= ---> a %%= 1 ---> a = a %% 1
  7. <<= ---> a <<= 1 ---> a = a << 1
  8. >>= ---> a >>= 1 ---> a = a >> 1
  9. &= ---> a &= 1 ---> a = a & 1 按位与
  10. ^= ---> a ^= 1 ---> a = a ^ 1 按位异或
  11. != ---> a ~= 1 ---> a = a ~ 1 按位取反

赋值运算符的特点:

  1. 运算顺序从往左
  2. 赋值运算符左边只能是变量,而右边可以是变量、表达式、常量值

位运算符

其实上面已经提到了,什么是位运算呢?其实就是二进制的位的逻辑运算,如 3 的二进制是 11,而 4 的二进制为 100,如果现在我们要计算逻辑与,则需要把 3 和 4 的二进制从后往前对应进行与运算即可:

第三位第二位第一位
3的二进制011
4的二进制100
与运算:&000
或运算:|111
  1. 按位与:&
  2. 按位或:|
  3. 按位取反:~
  4. 按位异或: ^

这儿容易和逻辑运算符弄混,逻辑运算符如下:

  1. 与:&&
  2. 或:||
  3. 非:!

位运算和逻辑运算的规则其实是一样的,只是一个是针对二进制,一个是针对十进制

三元运算符

语法:

条件表达式 ?表达式1:表达式2;
  • 1
  1. 如果条件为真,则执行表达式1
  2. 如果条件为假,则执行表达式2
#include<stdio.h>
int main(){
	int a = 3, b, c;
	b = a > 1 ? 12: 21;
	printf("条件为真时,b = %%d
", b);
	c = a > 4 ? 12: 21;
	printf("条件为假时,b = %%d
", c);
	return 0;
}


结果:
条件为真时,b = 12
条件为假时,b = 21 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

三元运算符等价于:

if(条件){
    表达式1;
} else {
    表达式2;
}
  • 1
  • 2
  • 3
  • 4
  • 5

运算符优先级:

  1. 圆括号:( ),下标运算符:[],结构成员运算符:.,分量运算符的指向结构体成员运算符 :->
  2. 逻辑非:!,逻辑按位取反运算符~、自增自减运算符--,++、负号运算符-、类型转换运算符(类型)、指针运算符和取地址运算符*,&、长度运算符sizeof
  3. 乘法运算符*、除法运算符/、取余运算符%%
  4. 加法运算符+、减法运算符-
  5. 左移动运算符<<、右移动运算符>>
  6. 关系运算符<, >, < , >=
  7. 等于运算符==、不等于运算符!=
  8. 按位与运算符 &
  9. 按位异或运算符^
  10. 按位或运算符 |
  11. 逻辑与运算符 &&
  12. 逻辑或运算符 ||
  13. 条件运算符 ?:
  14. 赋值运算符=
  15. 逗号运算符 ,

参考: C语言中运算符优先级排序_百度知道 (baidu.com)

标识符的命名规则和规范

规则:

  1. 由26个大小写英文字母、数字0~9、及下划线_ 组成
  2. 其中数字不能开头,如8a 这样的命名规则是错误的
  3. 同时也不可以使用关键字命令,如: if 或者 int 之类的词都不能作为标识符
  4. C语言严格区分大小写,长度无限制
  5. 标识符不能包空格,如:a b这样的命名就是错误的,这个时候可以使用下划线来替代空格:a_b

规范:

  1. 不能出现仅靠大小写来区分相似的标识符,如:int a, A
  2. 所有的宏定义、枚举常数、常量都使用大写字母命令
  3. 定义变量需要初始化,不然会出现难以预料的结果,这是因为现在使用的变量在以前可能存储过其他数据
  4. 多个单词组成时,可以使用小驼峰:xxxYyyyZzz,即第一单词首字母小写,其余单词首字母都大写。也可以是使用大驼峰:XxxYyyZzz,所有单词的首字母都大写

输入与输出语句

C语言本身是没有输入输出语句的,但是可以引入C标准库:#include<stdio.h>

输入

scanf("");
  • 1

输出

printf("");
  • 1

本人小白一枚,但喜学习,今日做此笔记,供诸君参读,如有错误处,还需君指出。做得有些简陋,如有疑问,可以私聊,我尽力而为。

与君共勉

参考:bilibili尚硅谷

推荐阅读