admin管理员组

文章数量:1794759

C语言:操作符详解(超详细的操作符详解)

操作符的分类

算术操作符:+ - * / % 逻辑操作符: && || !、 移位操作符:<< >> 赋值操作符:= += -= *= /= %= &= |= ^= >>= <<= 单⽬操作符: !、++、--、&、*、+、-、~ 、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,

逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-06-02,如有侵权请联系 cloudcommunity@tencent 删除函数硬件原理存储二进制

本文标签: C语言操作符详解(超详细的操作符详解)