十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C语言_运算符

C语言_运算符 运算符C语言中有很多种运算符算数、关系、逻辑、位、赋值、三目...我觉得比起运算符其中有很多更像是一种标志而非运算但我们统统称为运算符。运算符是有优先级的我们后面再说。一.算数运算符与赋值运算符算数运算符很简单、-、*、/、%、、--。就是这些比较好理解吧但是有几个没那么眼熟的我来说一下。1.1 / 与 %在数学中%是除而C语言中%是取余运算比如5 % 4 14 % 5 4。个人认为这个运算符非常有灵性比如当你需要求一个素数只有1和他本身可以整除他本身时你就需要用到%来对所有小于他的整数进行运算。以及当你要描述一个数据集这个数据集有两个标志分别指向最后一个元素的下一个格子和第一个元素且是循环的你可以非常巧妙的用%将你更改后的标志对这个数据集的最大值进行取余从而让这些标志不会超过最大值。如图而\才是真正的除法很多初学者会有一个疑惑两个除不开整数相除会得到一个小数吗这个问题的答案取决于你整数的类型(C语言的特色数据类型)如果两个整数是这么写的a10b8那么答案就是只会得到能整数部分小数部分会全部舍弃没有四舍五入。如果两个整数是这么写的a10.0b8.0那么你会得到几乎和纸面计算量一样的答案为什么是几乎一样呢因为小数的存储方法会导致一些误差无伤大雅。1.2 -- 与 这两个比较猎奇。由于--与的操作逻辑一样下面只由举例。可以让一个变量数进行加一的操作比如a 1 a操作结束后a 2意思就是a 和a a 1 几乎是一个意思。你也可以这么写a 1 a操作结束后a 2看上去写在前面写在后面没什么区别但是其实是有的。a是先进行操作再自加a则是先自加再进行操作比如#伪代码 b 1; a 2; b b (a); 拆解 b b (a) b 2 1; b 3; a a a 1; a 2; #运算后 b 3,a 2 相同条件 b b (a); 拆解 b b (a) a a 1; a 2; b 2 2; b 4; #运算后 b 4,a 2一般用的多的是a这种写法反正我是这样我比较笨脑子转不动那么多圈。--则同上。补充一点运算数的数量被称为目比如是一个双目运算符因为需要左右各一个而/--则是单目因为只需要一个运算数当然和-作为正负数的时候是单目运算符。1.3赋值运算符 就是和的变体我们叫赋值运算。不能对常量赋值只能对变量进行赋值还有一些简单的写法比如a2意思就是aa2加减乘除都可以这么运算。小知识点赋值后会返回一个true如果有东西接收他的话。二.关系运算符 , , , , , !我感觉看长相也能猜出来是干啥的。首先值得注意的是C语言中 才是判断两个数据是否相等的符号而 则是赋值 一定不要在判断中用错否则会导致永远判true。C语言是怎么运行这些运算符的呢是进行对应的判断后返回一个0或1(小知识点非0即真)比如103会返回一个1。那么 1032会返回几呢结果是0我们编程语言就是这么严谨因为103是真的所以返回一个1算式变成121 2是假的所以返回0那么这个时候就有朋友问了乐迪乐迪那这种连续判断怎么写啊。这就要涉及逻辑运算符了。三.逻辑运算符 ||分别是非或与回到上一个问题如果你写成103 32 那么你就达到你想要的效果了与嘛同真为真。非是把真的变成假假的变成真与是同真为真或是同假为假。我最开始记只记或因为算式听起来就符合逻辑103 || 32 翻译成中文就是 十大于三或三大于二就行这样就能推出来同假为假两个都是假了与只要记着和他相反就行。不过值得一提的是逻辑运算如果左侧可以结束判断那么右侧就不会被判断称之为短路。虽然节省算力但是有时候会产生奇怪的bug比如31 || i (((x*2)/y)2*(z%10))不用管右边是啥因为31已经是真了或运算只要有一个是真就会返回真所以不会算右边就对了但如果你后面需要右边运算后的值那就坏了。所以最好不要把赋值以及复杂操作什么的写在逻辑运算中没必要。最后是和||的真值表可以记一下和我上面说的一样左右||0000010110011111四.位运算符~、、|、^、、取反、与、或、异或、左移、右移。位操作操作的是二进制数所有数在内存的存储方式都是二进制数我们称之为补码。补码是怎么来的呢是原码-反码-补码。原码是什么就是直接变化得到的二进制数那为什不直接用原码呢因为负数不好表示你不能在内存中写一个-0001表示-1内存只有0和1图灵说的要有0和1懂我意思吗。正数的补码和原码一样区别在负数将-1转化成补码过程是这样的先写原码1001再写反码除了符号位按位取反1110再加11111注我只写了四位但内存中不止四位一般是32位最高位是符号位正为0负为1。那么你现在大概了解了数据的存储方式下面正式学习一下位运算吧。~、、|、^就和你以前学的一样。可以用来判断一个数的奇偶因为如果一个数是偶数那他补码的第一位一定是0嘛所以判断的时候直接1如果返回0就是偶数返回1就是奇数。异或比较巧妙因为有a^b c ,c^a b这条性质的存在所以异或可以用来做一些简单的加密同时可以进行一些非常非常巧妙的运算。大家可以搜一下洛谷P1161的异或解题思路知道原理就能感受到异或的巧妙。 、左移和右移将一个数的二进制数进行向左或向右移动n次被顶掉的删去新加入的补0或符号位比如12拆解来看1的二进制补码00011左移两次0100于是1就变成了4可以注意到左移了两次1变大了2的2次方倍所以其实左移n次数字就会变大2的n次方倍右移就是降低但不是绝对的如果全移走只剩0了或者符号位被改变就不符合这个逻辑了。什么时候补0什么时候补符号位呢一般左移补0右移补符号位因为有负数存在嘛注左右移时符号位参与移动。五.三目运算符 其实是一个判断语句。比如(ab?maxa:maxb);可以翻译成a大于b吗大于的话maxa不大于的话maxb.写的时候记得加括号虽然有时候不加不会影响但是最好还是加上因为运算符之间是有优先级的不只是三目运算会和外面的运算可能结合三目运算内部也可能有奇怪的结合。六.优先级优先级运算符名称结合性1括号左到右[]数组下标偏移量同上.结构体成员访问同上-结构体指针成员访问同上 --后置自增减同上2 --前置自增减右到左 -正负同上 ~非 反同上*解引用同上取地址同上()强制类型转换同上3* / %乘 除 余左到右4 -加 减左到右5 左移 右移左到右6,,,比较大小左到右7,!等于不等于左到右8按位与左到右9^按位异或左到右10|按位或左到右11逻辑与左到右12||逻辑或左到右13 三目右到左14 -...赋值运算与复合赋值右到左所有运算符都有他的优先级但不需要全部背下来用的多了自然就记住了。而且编程语言是服务于程序员的在设计之初就考虑到了最方便的情况正常使用的话大多时候不会出错但是还是要有一些印象面试时的题有时候会恶心你。特殊的运算顺序还是可以及以下的。
返回列表