C语言基础:常量、运算符
第三章 常量
常量
- 常量在程序期间是不允许改变的
- 常量可以是任何的基本数据类型(整型、浮点型、字符型、枚举型)
- 定义后不能进行修改
常量类型
整数常量
- 十进制
- 八进制:0123
- 十六进制:0x123,0X123
浮点常量
- 小数
- 指数
字符常量
- 单引号中单字符,如
'a'
- 转义字符也是字符常量,如
' '
字符串常量
- 双引号:
" "
- 双引号中可以包含:普通字符
a
或者abc
,转义字符a b
- 字符常量是数组=
常量语法
-
宏定义
#define 常量名 常量值
-
const关键字定义
const 数据类型 常量名 = 常量值;
-
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
第四章 运算符
算术运算符
- 正号:+
- 负号:-
- 加号:+
- 减号:-
- 乘号:*
- 除号:/
- 取模(取余):%%
- 自增:++
- 自减:–
注:
-
自增自减分为前自增自减
++a
,--a
,后自增自减a++
,a--
-
前++:先自增后赋值,前-- 同理
-
后++:先赋值后自增,后-- 同理
-
前增后增只有一个时,都是增 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
-
整数除法会舍弃小数部分,如
99/10=9
,不论小数部分有多大,直接省略掉
关系运算符
- 等于:==
- 不等于:!=
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
注:
- 关系运算符的结果只有真、假两种结果,真的是非零,假的等于 0
- 关系运算符常用在 if 结构语句,或者循环语句中
- 等于是:==,赋值是:=
逻辑运算符
- 与:&&
- 或:||
- 非:!
注:
- 同关系运算符一样,结果也只有两种,一种为真、一种为假
- 短路现象,这种情况出现在
&&
和||
两种逻辑运算符中&&
:a && b
, 如果 a 为假,后面的就不用进行判断了,因为在与运算中“一假全假”||
:a || b
,如果 a 为真,后面的也同样不需要进行判断,因为在或运算中“一真全真”
赋值运算符
= ---> a = 1
-= ---> a -= 1 ---> a = a - 1
+= ---> a += 1 ---> a = a + 1
*= ---> a *= 1 ---> a = a * 1
/= ---> a /= 1 ---> a = a / 1
%%= ---> a %%= 1 ---> a = a %% 1
<<= ---> a <<= 1 ---> a = a << 1
>>= ---> a >>= 1 ---> a = a >> 1
&= ---> a &= 1 ---> a = a & 1
按位与^= ---> a ^= 1 ---> a = a ^ 1
按位异或!= ---> a ~= 1 ---> a = a ~ 1
按位取反
赋值运算符的特点:
- 运算顺序从往左
- 赋值运算符左边只能是变量,而右边可以是变量、表达式、常量值
位运算符
其实上面已经提到了,什么是位运算呢?其实就是二进制的位的逻辑运算,如 3 的二进制是 11,而 4 的二进制为 100,如果现在我们要计算逻辑与,则需要把 3 和 4 的二进制从后往前对应进行与运算即可:
第三位 | 第二位 | 第一位 | |
---|---|---|---|
3的二进制 | 0 | 1 | 1 |
4的二进制 | 1 | 0 | 0 |
与运算:& | 0 | 0 | 0 |
或运算:| | 1 | 1 | 1 |
- 按位与:&
- 按位或:|
- 按位取反:
~
- 按位异或: ^
这儿容易和逻辑运算符弄混,逻辑运算符如下:
- 与:&&
- 或:||
- 非:!
位运算和逻辑运算的规则其实是一样的,只是一个是针对二进制,一个是针对十进制
三元运算符
语法:
条件表达式 ?表达式1:表达式2;
- 1
- 如果条件为真,则执行表达式1
- 如果条件为假,则执行表达式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
运算符优先级:
- 圆括号:
( )
,下标运算符:[]
,结构成员运算符:.
,分量运算符的指向结构体成员运算符 :->
- 逻辑非:
!
,逻辑按位取反运算符~
、自增自减运算符--
,++
、负号运算符-
、类型转换运算符(类型)
、指针运算符和取地址运算符*
,&
、长度运算符sizeof
- 乘法运算符
*
、除法运算符/
、取余运算符%%
- 加法运算符
+
、减法运算符-
- 左移动运算符
<<
、右移动运算符>>
- 关系运算符
<
,>
,<
,>=
- 等于运算符
==
、不等于运算符!=
- 按位与运算符
&
- 按位异或运算符
^
- 按位或运算符
|
- 逻辑与运算符
&&
- 逻辑或运算符
||
- 条件运算符
?:
- 赋值运算符
=
等 - 逗号运算符
,
参考: C语言中运算符优先级排序_百度知道 (baidu.com)
标识符的命名规则和规范
规则:
- 由26个大小写英文字母、数字0~9、及下划线
_
组成 - 其中数字不能开头,如
8a
这样的命名规则是错误的 - 同时也不可以使用关键字命令,如:
if
或者int
之类的词都不能作为标识符 - C语言严格区分大小写,长度无限制
- 标识符不能包空格,如:
a b
这样的命名就是错误的,这个时候可以使用下划线来替代空格:a_b
规范:
- 不能出现仅靠大小写来区分相似的标识符,如:
int a, A
- 所有的宏定义、枚举常数、常量都使用大写字母命令
- 定义变量需要初始化,不然会出现难以预料的结果,这是因为现在使用的变量在以前可能存储过其他数据
- 多个单词组成时,可以使用小驼峰:
xxxYyyyZzz
,即第一单词首字母小写,其余单词首字母都大写。也可以是使用大驼峰:XxxYyyZzz
,所有单词的首字母都大写
输入与输出语句
C语言本身是没有输入输出语句的,但是可以引入C标准库:#include<stdio.h>
输入
scanf("");
- 1
输出
printf("");
- 1
本人小白一枚,但喜学习,今日做此笔记,供诸君参读,如有错误处,还需君指出。做得有些简陋,如有疑问,可以私聊,我尽力而为。
与君共勉
推荐阅读