一.操作符分类👋
1.移位操作符🧡
2.位操作符🧡
3.单目操作符🧡
4.算术操作符
5.赋值操作符、关系操作符
6.逻辑操作符
7.条件操作符
8.逗号表达式、下标引用、函数调用和结构成员
前面三种均是在使用过程中需要用二进制转换的,也是我们本篇文章介绍的重点~
二.整数二进制表达式🤞🏼
首先我们要知道在整数二进制的表达式中分为原码、反码和补码。
①.所谓原码,就是按照一个数的正负,直接写出其二进制表达形式,就是原码。而最高位的数字,为符号位。若最高位为1,则表示该数为正数,而若最高位为0,则表示该数为负数。
②.反码,则是在原码符号位不变的情况下,其他位按位取反。将0变为1,1变为0.
③.补码,则是反码+1.
这里有个很巧妙地点就是,由原码到补码应是取反、加一,而从补码到原码可以通过减一取反。同时!!补码通过取反加一,也可以得到原码!!!
三.相关操作符的详细介绍 👆🏻
1.移位操作符🌞
<< | 左移操作符 |
---|---|
>> | 右移操作符 |
注:1.内存中储存的起始是补码的二进制
2. 移位操作符的操作数只能是整数
3.只能移动正数位,不能移动负数位
1.1左移操作符
左移操作符的移位规则:左边抛弃,右边补0.
在这里a<<1的结果是移位后的效果,但是a本身的值是不变的。
1.2右移操作符
右移运算分为两类:
1.逻辑移位:右边丢弃,左边用0填充
2.算术移位:右边丢弃,左边用符号位填充
2.位操作符🌞
& | 按位与 |
---|---|
竖杠 | 按位或 |
^ | 按位异或 |
注:他们的操作数必须是整数,也是针对二进制位
1.&按位与 :两个数对应的补码,有0则为0,全为1才为1.
2.| 按位或:两个数对应的补码,有1则为1,全为0才为0.
3.^按位异或:两个数对应的补码,相同为1,相异为0.
异或操作符的特点:
①.a^a=0
②.0^a=a
③.异或支持交换率
一道面试题:不能临时创建变量(第三个变量),实现两个数的交换
int main()
{
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b; b=a^b^b=a
a = a ^ b; a=a^b^a=b
printf("%d %d", &a, &b);
return 0;
}
通过异或操作符,我们可以不用函数,不用创建第三个变量,从而实现两个数的交换。
3.单目操作符🌞
单目操作符有很多种,但在这里我只为大家介绍一种用到二进制表达式的。
‘ ~ ’
对一个数的二进制按位取反
若a=0,则a的补码为32个0,取反后为32个1,也就是补码为32个-1,则该数为-1.即~a=-1.
4有关有符号的类型和无符号的类型🌞
🍒🍒🍒这节有关会用到二进制表达的操作符的讲解就到这里啦~希望可以为大家带来帮助!也希望大家可以多多关注我,我也会努力为大家带来更有用的博客!🥕🥕🥕