c 语言中关于操作符部分的学习, 可以主要分为两个部分: 操作符和表达式.
这里首先是列举各种操作符, 在 C 语言中, 一般主要的操作符有这么几种: 算数操作符, 移位操作符, 位操作符, 赋值操作符, 单目运算符, 关系操作符, 逻辑操作符, 条件操作符, 逗号表达式以及比较特殊的几个操作符.
算数操作符
算数操作符, 主要是:+ , -, *, /, %
这些都是比较常见的, 不光是在 C 语言中学习到, 事实上从小我们学习数学都常用到他们, 所以这里没什么多说的, 就是有几点注意事项:
除了取模运算, 也就是取余数的 % 操作符, 其他的几个操作符都是可以用于整数运算和浮点数运算的;
% 取模运算在这里特殊的在于, 符号两边的操作数都必须是整数;
/ 操作符, 还是与数学上一样, 注意第二个操作数不是 0 就行, 这里如果两个操作数都是整数, 就按整数除法运算; 而只要其中不管哪个操作数为浮点数, 就按照浮点数除法运算.
移位操作符
移位操作符, 分别是左移操作符 << 和右移操作符 >> ,(PS: 移位操作, 是特别针对二进制序列进行的操作)
左移操作的 移位规则:
将所有有效位整体向左移动, 具体移动多少位是自己决定的, 并抛弃左边最高位, 并在右边空出来的位置补 0
右移操作的 移位规则:
则是抛弃将所有有效位整体向右移动, 并且挤掉最低有效位, 并在空出来的最高位补 0
至于有符号数的符号位是否影响移位运算, 这里不细说. 后面再详细讨论.
位操作符
位操作符有:&,|, ^, 作用分别是:
所谓按位与, 就是同一位上相同取 1, 相异为 0; 而按位或, 是有一个 1 就是取 1, 两个都是 0, 则取 0; 而按位与或, 则是同一位相异取 1, 相同取 0
赋值操作符
= 是用来进行赋值的
这里要注意这个等号在 C 语言里不是等号的意思, 它是给变量写入一个值. 而等于在 C 语言里, 我们是用 == 来定义的. 而事实上, 将 = 与 == 混用, 是我们学习编程初期, 比较常犯的一个错误. 然而, 有时候, 你在程序里把他们混用了, 编译时, 却没有报错, 但在程序运行时却会发生不可预知的错误.
相应的对赋值操作, 为了简化代码, 将赋值与其他操作进行结合, 就有了复合赋值符的概念:+=,-=, *=, /=, %= , <<=,>>=,&=,|=,^=.
都是将符合赋值的左右操作符进行相应的操作, 并将结果覆盖性的重新赋给左操作数.
单目运算符
这里就是要注意, 将取地址操作与按位与进行区分. 区分的办法也不难, 就是取地址, 它是对一个变量进行取地址, 所以只是操作符右边有操作数; 而与运算, 是两个操作数之间的, 所以, 与操作符两边都会有操作数.
并且, 要注意前置 ++, 前置 --, 是先进行运算再使用数据; 而后置 ++, 后置 --, 则是先使用数据, 在进行运算.
关系操作符
所谓关系操作, 就是进行判定, 两个操作数, 或两个表达式的结果, 或者操作数与表达式之间的关系. 没有什么多说的, 只要注意, 向上面一样, 区分 = 与 == 的区别就行.
逻辑操作符
逻辑与, 逻辑或的部分, 需要区分他们与按位与, 按位或的差别. 以及他们自己的特点: 逻辑操作表达式中的短路现象这么一个, 比较特别的情况.
逗号表达式
exp1,exp2,exp3,...expN
逗号表达式这里, 是把多个表达式放在一起, 使用逗号进行分隔. 逗号表达式从左向右依次序执行, 但整个表达式的结果一般是最后一个表达式影响的, 是最后一个表达式的结果
条件操作符
条件操作符的一个典型应用就是三目运算符, 比如我们进行比较大小的:
return (1>2)?1:0
特殊的几个操作符
另外还可以列举的几个特殊的操作符有:
1. 下标引用操作符 [ ]
下标引用操作符一般是用于数组元素的访问: array[index], 这个 array 就是数组名, 而这个索引值 index 就是指的数组元素的位置, 而数组元素的存储的位置, 从 0 到 n-1.
2. 函数调用操作符 ()
对于函数调用操作符,() 里面的一般是传递给函数的参数, 当然函数里可以不对数据进行操作, 那么这时就可以不往里面传参数了
3. 访问结构体成员的. 和访问结构体指针的 ->
对于结构体这块, 有: 结构体变量. 成员名 结构体指针 -> 成员名
其实对结构体指针, 也可以用 *(结构体指针). 成员名, 但是这样一般会引起歧义, 因而使用了指向操作符 -> 来代替.
来源: http://www.bubuko.com/infodetail-2902194.html