一、知识铺垫:
今天呢,要介绍操作符的一部分知识,操作符中一些操作符与二进制有关系,所以我们先铺垫一下关于进制的知识
1.二进制与进制转换
在生活中,我们似乎听过二进制这个词,那这个二进制到底是什么意思呢?
1.1 进制的含义及特点
其实啊,所谓二进制,甚至8进制、16进制只是数值的不同表现形式而已比如:
| 15的2进制 | 1111 |
| 15的8进制 | 17 |
| 15的10进制 | 15 |
| 15的16进制 | F |
(16进制的数值前要写0x 8进制数值前要写0)
我们先从10进制入手,由此来介绍进制,我们日常生活中使用的数字都是10进制的,我们清楚明白10进制的以下特点:
其实其他进制也是类似的两个特点
| 进制 | 特点 |
| 2进制 |
满2进1 每一位由0~1组成 |
| 8进制 |
满8进一 每一位由0~7组成 |
| 16进制 |
满16进一 每一位由0~9 a~f组成 其中a~f可看作10~15 |
1.2 进制转换
929的10进制是九百二十九, 为什么是这个值呢?这个问题似乎有些奇怪,小学时便学过数位 个十百千万 ,这些个位、⼗位、百位....都是由权重的,分别每⼀位的权重是 10^0, 10² , 10³ ...
可以这样理解权重:
| 百位 | 十位 | 个位 | ||
| 10进制的权 | 1 | 2 | 3 | |
| 权重 | 10^2 | 10^1 | 10^0 | |
| 权重值 | 100 | 10 | 1 | |
| 求值 | 1*100 + 2*10 + 3*1 = | 123 | ||
2进制的规则类似:
123二进制的数值为1101,可以这样来理解
| 2进制的位 | 1 | 1 | 0 | 1 | |
| 权重 | 2^3 | 2^2 | 2^1 | 2^0 | |
| 权重值 | 8 | 4 | 2 | 1 | |
| 求值 | 1*8 +1*4 +0*2 +1*1= | 123 | |||
8进制 16进制以此类推即可
1.2.1 10进制与二进制的转换
以125为例,将125转换为二进制:

1.2.2 2进制转8进制 16进制
2进制转8进制
以2进制01101011 为例:
| 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 | |
| 2进制 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
| 8进制 | 2*0+1*1=1 | 1*4+0*2+1*1=5 | 0*4+1*2+1*1=3 | |||||
8进制表示的时候前面加0,所以换成8进制为 0153
2进制转16进制
| 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
| 2进制 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
| 16进制 | 8*0+4*1+2*1+1*0=6 | 8*1+4*0+2*1+1*1=b(看作11) | ||||||
2 原码 反码 补码
2.1 基本知识
2.2 三者关系
为什么呢?
二、操作符的分类
| 算术操作符 | + - * / % |
| 移位操作符 | << >> |
| 位操作符 | & | ^ |
| 赋值操作符 | = += -= *= %= <<= >>= &= |= ^= |
| 单目操作符 | ! ++ -- & * - + ~ sizeof (类型) |
| 关系操作符 | > >= < <= == != |
| 逻辑操作符 | && || |
| 条件操作符 | ? : |
| 逗号操作符 | , |
| 下标引用 | [ ] |
| 函数调用 | () |
| 结构成员访问 |
. 、 ->
|
本次将介绍一部分的操作符
三、移位操作符
1. 左移操作符
移位规则:左边抛弃,右边补0
演示:
#include <stdio.h>
int main()
{
int num = 10;
int n = num<<1;
printf("n = %d\n",n);
printf("num = %d\n",num);
return 0;
}

2.右移操作符
#include <stdio.h>
int main ()
{
int num = 10 ;
int n = num>>1;
printf("n = %d\n", n);
printf("num = %d\n", num);
return 0;
}

逻辑右移1位演示

位左移n位,相当于右操作数乘于2的n次幂
位右移n位,相当于右操作数整除于2的n次幂
四、位操作符
1.介绍
位操作符有:
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
注意:他们的操作数必须是整数
而这位与 位或 是是怎么个回事呢?
首先这些操作符,运行的是二进制
把这两个数转化位二进制

&位与: 规则就是 两边同为1则为1,否则为0
|位或 : 规则就是 两边有1则为1,否则位0

^位异或:两边相同则为0,不同则为1

而这~: 就是按位取反,数位值为1,结果为0,值为0,结果为1

代码演示:
#include <stdio.h>
int main ()
{
int num1 = 3;
int num2 = 5;
printf("%d\n", num1 & num2);
printf("%d\n", num1 | num2);
printf("%d\n", num1 ^ num2);
printf("%d\n", ~0);
return 0;
}
2.经典例题
不能创建临时变量(第三个变量),实现两个整数的交换。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d\n", a, b);
return 0;
}


被折叠的 条评论
为什么被折叠?



