C语言:操作符详解1

目录

1.操作符的分类

2.二进制和进制转换 

2.1 二进制的概念

2.2 2进制与10进制相互转换

2.3 2进制转8进制和16进制 

3.原码、反码、补码 

3.1正整数 

3.2负整数 

3.3三种表示方式的转换 (负整数)

4.移位操作符 

4.1左移操作符 (<<)

4.2右移操作符 (>>)

5.位操作符:&、|、^、~ 

5.1 & 按位与 

5.2 | 按位或 

​编辑 5.3 ^ 按位异或

5.4  ~ 按位取反


1.操作符的分类

• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << 、>> 
• 位操作符:  & 、| 、 ^ 、  `
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^= 
• 单目操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 != 
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引用: [ ]
• 函数调用: ( )
• 结构成员访问: . 、->

2.二进制和进制转换 

2.1 二进制的概念

2进制、8进制、10进制、16进制是我们生活中常见的讲法,那它们到底是什么意思呢?

其实2进制、8进制、10进制、16进制是数值的不同表示形式。

比如:数值15的各种进制的表示形式是:

2进制 :1111

8进制 :17

10进制 :15

15进制 :F

在这里我们重点介绍二进制: 

介绍二进制可以和十进制进行对比学习:

 

2.2 2进制与10进制相互转换

其实10进制的123表示的值是一百二十三,那这是为什么呢?

其实10进制的每一位是权重的,如图:

C语言:操作符详解1_第1张图片 2进制和10进制是类似的,只不过2进制的每一位的权重和10进制的不同,如图:

C语言:操作符详解1_第2张图片

由此可以使一个2进制的数转换成10进制的数

如何将10进制的数转换成2进制的数呢?让我们一起来看看: 

C语言:操作符详解1_第3张图片

 由图可知:10进制的125转换的2进制:1111101

2.3 2进制转8进制和16进制 

   8进制的数字每⼀位是0~7的,0~7的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算。

   16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多有4个2进制位就足够了,比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。

 注意:

 2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制;

 2进制的01101011,换成16进制:0x6b,16进制表示的时候前面加0x。

3.原码、反码、补码 

 整数的2进制表示方法有三种,即:原码,反码,补码。

有符号的整数的三种表示方式均有符号位和数值位两部分,在二进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。整形(整数)占四个字节(32bit)。

符号位都是用“0”表示“正”,用“1”表示“负”。

3.1正整数 

正整数的原码,反码,补码都相同。 

 整数:10

 原码:00000000000000000000000000001010

 反码:00000000000000000000000000001010

 补码:00000000000000000000000000001010

3.2负整数 

负整数的三种表示方法各不相同 

原码:直接将数值按照正负数形式转换成二进制得到的就是原码

反码:原码的符号位不变,其他位依次按位取反得到反码

补码:反码+1得到补码

整数:-10

原码:00000000000000000000000000001010

反码:01111111111111111111111111110101

补码:01111111111111111111111111110110

3.3三种表示方式的转换 (负整数)

C语言:操作符详解1_第4张图片

对于整形来说:数据存放内存中其实存放的是补码。 

4.移位操作符 

移位操作符的操作数只能是整数。 

4.1左移操作符 (<<)

移位规则:左移抛弃,右边补0。(如图)

C语言:操作符详解1_第5张图片

代码展示:

#include 
int main()
{
    int num = 10;
    int n = num<<1;
    printf("n= %d\n", n);
    printf("num= %d\n", num);
    return 0;
}

 C语言:操作符详解1_第6张图片

4.2右移操作符 (>>)

移位规则:

1.逻辑右移:左边用0填充,右边丢弃。

2.算术右移:左边用原符号位填充,右边丢弃。 

C语言:操作符详解1_第7张图片

对于移位运算符,不能移动负数位,这是标准未定义的。

例如:

int num = 10;
num>>-1;//error

5.位操作符:&、|、^、~ 

位操作符有:(操作数必须是整数

&   //按位与

|   //按位或

^   //按位异或

~   // 按位取反

5.1 & 按位与 

两个操作数都是1,才为1。如图: 

C语言:操作符详解1_第8张图片 用代码验证:

C语言:操作符详解1_第9张图片

5.2 | 按位或 

两个操作数都是0,才为0。如图:  

 C语言:操作符详解1_第10张图片

用代码验证:

C语言:操作符详解1_第11张图片 5.3 ^ 按位异或

操作数相同为0,两个操作数不同为1。如图:

C语言:操作符详解1_第12张图片

用代码验证:

C语言:操作符详解1_第13张图片

利用异或符可以进行交换数据的操作(如图):

C语言:操作符详解1_第14张图片

用代码验证:

C语言:操作符详解1_第15张图片

5.4  ~ 按位取反

对操作数依此取反即:0取反得1,1取反得。 如图:

C语言:操作符详解1_第16张图片

用代码验证:

C语言:操作符详解1_第17张图片


第一小节到此结束

如有用给个免费的点赞和关注,一起学习一起成长。

C语言:操作符详解1_第18张图片

你可能感兴趣的:(c语言,开发语言)