分为逻辑移位和算术移位

简介: 分为逻辑移位和算术移位

3.2 右移操作符
分为逻辑移位和算术移位
逻辑移位:左边用0填充,右边丢弃
算术移位:左边用原该值的符号位填充,右边丢弃
右移操作符采用逻辑移位还是算术移位,取决于电脑编译器

正数右移一位(算术移位):

代码演示:

int main()
{

int a = 5;
int b = a >> 1;
printf("%d\n", a);//打印-5
printf("%d\n", b);// -3
return 0;

}
1
2
3
4
5
6
7
8
分析:
00000000 00000000 00000000 00000101 5的二进制补码
算术右移:左边用原该值的符号位1填充 右边丢弃1
00000000 00000000 00000000 00000010 右移后的补码
右移后的补码就是右移后的原码 2
运行结果:

  1. 位操作符

位操作符:

& 按位与 相同为1,相异为0
| 按位或 有1为1,全0为0
^ 按位异或 相同为0,相异为1
注:他们的操作数必须是整数

代码演示:

include<stdio.h>

int main()
{

int a = 1;
int b = -2;
int c = a & b;
int d = a | b;
int e = a ^ b;
printf("%d\n", c);
printf("%d\n", d);
printf("%d\n", e);
return 0;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
分析:
00000000 00000000 00000000 00000001 1的补码
11111111 11111111 11111111 11111110 -2的补码
按位与:相同为1, 相异为0
00000000 00000000 00000000 00000000 0的补码 原码表示0
按位或: 有1为1, 全0为0
11111111 11111111 11111111 11111111 -1的补码 原码表示-1
按位异或: 相同为0, 相异为1
11111111 11111111 11111111 11111111 -1的补码 原码表示-1

运行结果:
结果表明分析的很正确

注意:数据在内存中始终是以二进制存放的。
数值是以补码表示的。
正整数,符号位为0,原码=反码=补码。
负整数,原码转化为反码:符号位为1不变,其余位按位取反;
反码转化为补码:反码+1。

  1. 赋值操作符

赋值操作符就是能够重新赋值

注意:条件语句中,if(a==10) 易错被写成赋值:if(a=10),这时条件为真,语句将执行。为了避免错误,可写成 if(10==a),数值10不能被赋值,写成赋值时会报错。

复合赋值符:

+=

*=
/=
%=

=
<<=
&=
|=
^=

int x = 0;
x = x +10;
x+=10;//复合赋值
1
2
3
其他的运算符也是这样的,这样写比较简便。

总结
本篇详细整理了前四种操作符,整理复习的同时也希望能帮到各位刚接触c的朋友们,下期是另外六种操作符的详解。

相关文章
|
存储 编译器 C语言
C语言学习入门之【数组】
C语言学习入门之【数组】
C语言学习入门之【数组】
C语言进阶——函数指针
C语言进阶——函数指针
C语言基础中的字符串和转义字符的知识
本篇整理的是C语言基础中的字符串和转义字符的知识
C语言实现三子棋游戏详细教程
C语言实现三子棋游戏详细教程
|
程序员 C语言 Python
维基百科中对函数的定义:子程序
维基百科中对函数的定义:子程序