C语言:操作符详解(超详细的操作符详解)
孤独的纸鹤-落叶 2024-09-05 13:05:02 阅读 96
目录
操作符的分类
原码、反码、补码
符号位
移位操作符
左移操作符<<
右移操作符>>
位操作符:&、|、^、~
按位与 &
按位或 |
按位异或 ^
按位取反 ~
逗号表达式 ,
操作符的分类
算术操作符:+ - * / %
逻辑操作符: && || !、
移位操作符:<< >>
赋值操作符:= += -= *= /= %= &= |= ^= >>= <<=
单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
关系操作符:> 、>= 、< 、<= 、 == 、 !=
条件操作符: ? :
逗号表达式: ,
下标引⽤: []
函数调⽤: ()
原码、反码、补码
原码、反码、补码:都是用二进制表示的
原码、反码、补码:有正数和负数
符号位
最⾼位的1位是被当做符号
位,剩余的都是数值位。
符号位都是⽤0表⽰“正”,⽤1表⽰“负”、
正数的符号位是 0
负数的符号位是 1
正数的原码、反码、补码都是一样的
负数的三种表⽰⽅法各不相同
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码
反码:符号位不变,其他位按位取反,把0变1,把1变0
补码:反码+1就可以得到补码
数据存放内存中其实存放的是补码
为什么呢?
在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀
处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算
过程是相同的,不需要额外的硬件电路。
下面这代码的加法运算,是先把a和b原码转换成反码在进行加法运算,加完后在转换成原码进行输出,减法运算同理
移位操作符
对于移位操作符不可移动负数,是错误的
int num = 10;
num>>-1; //error
左移操作符<<
左移操作符是左边丢弃,右边补0
右移操作符>>
右移操作符是右边丢弃,左边补符号位
位操作符:&、|、^、~
& //按位与
| //按位或
^ //按位异或
~ //按位取反
按位与 &
、
按位与和逻辑与的原理一样
a和b的二进制对比2个1才为1,其他为0
按位或 |
按位或和逻辑或的原理一样
a和b的二进制对比有1就为1
2个0才为0
按位异或 ^
按位异或是相异为1,相同为0
按位取反 ~
0的二进制位全是0,取反后是全1
-1也是一样
逗号表达式 ,
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。
逗号表达式是用,号隔开的
表达式,表达式,表达式........
我们可以看到1赋值给a ,a大于0,
a+b赋值给c,把c赋值给a和b,
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。