目录
前言
上一节中, 我们说了C语言中了变量和常量, 包括C语言中有哪些类型的变量? 变量所占的空间大小是多少? 等等 这一部分我们来说说C语言中提供的运算符有哪些? 当然因为难度的差异, 一些运算符也是不能够完全说清楚的, 我们就放在后面说~~
后面呢? 我们还会说: C语言中的分支结构, 循环结构, 函数, 指针, C++中的STL, 面向对象 等等, 各位朋友可以期待一下~~
算数运算符
算数运算符和数学中的加减乘等等, 是一致的
+ - * /
这里说一下, 这里的除法运算, 和数学中一样的是分母不能为0, C语言中的整数之间除法是"地板除", 是没有小数的, 比如5/2是等于2的, 而不是2.5, 如果想要结果是2.5, 必须是5或者2其中有一个是浮点数类型, 比如5.0/2或者 5/2.0这样的.
% 取模运算符
取模运算符, 使用来求除法运算之后的余数的, 比如 5 % 2 的结果是 1
这里和除法类似, 也是不能对0取模的
赋值运算符
= 等于符号, 作为C语言中的赋值运算符, 我们在之前的变量那一节也就说明了他的用法了
还有 +=, -=, *=, /=
这里几句话说明, num += 10, 相当于 num = num + 10 的简写
那么 num /= 10 就是 num = num / 10 的简写了, 其他同理~
关系运算符
C语言也支持比较两个数是否相等, 或者大于, 小于 ...
有 == 判断是否相等, > 大于符号, < 小于符号 >= 大于等于符号, <= 小于等于符号
C语言中, = 符号, 是用来赋值的, 不能用于判断是否相等, 这里也是新手很容易出现错误的一点
C语言中, 在C99标准之前是没有bool类型的(bool类型是用于表示真或者假的类型, 他只有两个值, 分别是 true 表示真, false 表示假), 所以C语言中, 是使用0表示逻辑假, 非0表示逻辑真(通常是1, 但是不同的编译器有不同的规定)
这里再说一下, 关系运算符通常是有一个返回的结果的, 比如:
赋值运算符也是一样的, 但是赋值运算符返回的结果取决于赋的值是多少, 如果赋的值为0, 那么返回的值就是0, 为逻辑假, 赋的值为非0, 为逻辑真
在这个地方, 很多新手很容易在 if () 分支判断, 误使用 = 符号来判断是否是相等的, 因为赋的值为非0的, 发现每次都是逻辑真, 都会进入分支, 从而产生错误, 这个地方要注意一下, 并且也可以使用调试的方法来具体观察, 关于分支判断, 下一篇我们就聊~~
三目运算符
三目运算符, 这里的三目, 意思是有三个运算数, 如果 a > b 成立, 则返回a, 否则返回b~, 可以和只有两种分支的if分支等价替换~
逻辑运算符
逻辑运算符 也会返回一个值:
&& 两个条件都为真 则返回真
|| 两个条件有一个为真 则返回真
往往用在 分支语句, 循环语句中~~
这里着重说一下 && 和 || 的短路运算, 加入说 表达式A && 表达式B, 因为&&两个均为真才返回真, 如果表达式A已经是假了, 那么表达式B就不会执行了
表达式A || 表达式B, 两个有一个为真就返回真了, 那么当表达式A已经为真了, 表达式B就不会执行了
上面的这两种情况就是叫做 逻辑运算符的短路问题, 我还相信还是十分好理解的~~, 加入说我们要写一个网站程序, 我们就可以将这中比较容易错误的条件放在前面, 使其触发短路, 后面的就不用执行了~
自增运算符 和 自减运算符
++, --
++ 和 -- 和之前的赋值运算符是一致的, num ++ 或者 ++ num 都是让 num 这个值自增1
自增运算符 和 自减运算符 有 前置和后置的区别, 如下:
前置和后置的区别是: 前置++是 先自增1, 再使用, 后置++是 先使用, 再让这个值自增1
第一行num++ , 因为 num 最开始是 10 , num++, 是先使用这个值, 就是10, 再让这个数自增1, 所以这个时候输出的是10, 但是输出之后, num就是11了, 再第二行, 先让num自增1, 之后再使用这个值, 所以输出的就是12了
地址相关的运算符
这一部分, 先简单说一下, 因为我们还没有说到指针变量, 所以在指针变量的地方再详细说这个.
& 符号, 用于获取一个变量在内存中的地址
* 符号, 用于访问一个指针变量(内存中的地址)所指向的空间(所指向内存地址中的值)
想要了解下面的两种运算符, 需要知道一个前置的知识, 就是计算机中的二进制表达, 我们平时使用的都是十进制, 但是在计算机中是只有二进制的. 我们可以结合十进制来学习二进制, 十进制中, 有十个符号, 来表述数字 零到九, 二进制中就只有两个符号来表示零到一
比如:
这里我认为重要的是要理解到, 十进制中的10, 是因为我们前提说明了, 只选了十个符号了作为十进制中数的表示符号, 所以在表示十这个数的时候, 没有更多的符号来专门表示十这个数了, 但是十六进制中, 还有a, b, c ... 可以来专门的表示十这个数, 所以这里要表示十这个数, 十进制就需要进位, 但是十六进制不需要进位, 也说明了要表示二这个数, 十进制和十六进制都不需要进位, 但是二进制需要进位了, 原因就是我们事先选定了多少个符号来表示数的概念~~
移位运算符
移位运算符有 >> << , 并且可以和上面的赋值运算符一起使用, 比如 >>= <<=
移位运算符有 >> <<, 是操作一个数的二进制序列, 比如:
在数的层面上, 可以理解为 >> 1, 是让这个数 / 2, << 1, 是让这个数 * 2
位运算符
& | ^
& 按位与
| 按位或
^ 按位异或
用来操作两个数的二进制序列, &, 两个都为真, 则结果为真, |, 两个有一个为真, 则结果为真, ^, 两个相同则为假, 两个不同则为真 如下:
位运算的玩法是非常的多的, 我们后面可以专门聊聊关于位运算的算法, 因为才到这里, 大家的没有太多的基础, 我们就不过深的聊了~
小结
大家可以看到, C语言中提供了相当丰富的运算符, 让我们去操作数据, 但是呢~, 有时候多也不一定好, 还是需要我们程序猿自己去小心的把控~~, 这样我们才能如臂使指的使用这些丰富的运算符!