运算符和关系式(三)

位运算符

定义

位运算是对整型数据进行的运算,而且符号位需要参与运算,主要用于编写系统软件,完成汇编语言能够完成的一些功能

分类

含义运算符举例结果
按位与&3&51
按位或l3l57
按位异或^3^56
按位取反~~3-4
左移<<3<<16
右移>>3>>11

结果验证

#include<stdio.h>
int main
{
  printf("%d\n",3&5);
  printf("%d\n",3|5);
  printf("%d\n",3^5);
  printf("%d\n",~3);
  printf("%d\n",3<<1);
  printf("%d\n",3>>1);

输出结果
1
7
6
-4
6
1

注意

1.仅按位取反运算是单目运算符,其余皆为双目运算符
2.位运算先将运算的整数转换为二进制再进行运算,运算结果再转换为整数(十进制)

运行分析

按位与

按位与“&”运算符,将两个运算量对应的二进制逐一按位进行逻辑与运算。每一位二进制数都要参与运算,包括符号位。

运算规则

二进制按位对应后,全真(1)则真(1),有假(0)则假(0)

按位或

按位或“|”运算符,将两个运算量对应的二进制逐一按位进行逻辑或运算。每一位二进制数都要参与运算,包括符号位

运算规则

二进制按位对应后,有真(1)则真(1),无真(1)则假(0)

按位异或

按位异或“^”运算符,将两个运算量对应的二进制逐一按位进行逻辑异或运算。每一位二进制数都要参与运算,包括符号位

运算规则

二进制按位对应后,相异为真,相同为假

按位取反

按位取反是一元运算符,其结果将运算量的每个二进制位逐一取反,包括符号位

运算方法

例:+3

转化为二进制:~00000011

进行逐一取反 :11111100

由于首位为1是负数,以补码形式表示(七位二进制):–1111100

该负数补码在c程序中得到机器数需在数字部分每位取反,末位加一:–0000011 + 1

最后得到机器数:–0000100

转化为十进制:-4

左移

左移运算符是一个双目运算符,需两个运算量参与且都为整数,如a<<n其意义是将a按照二进制位向左移动n位,变量a二进制的最高位n位舍弃,最低的n位用0补齐

运算方法

例:3<<1

3:00000011
左移后 :00000110

3的二进制向左移动1位:00000011X

最高位(最左位)的0舍去,最低位(最右位)X用0补齐:00000110

转化为十进制:+6

右移

右移运算符是双目运算符,需两个运算量参与且都为整数,如a>>n其意义是将a按照二进制位向右移动n位,变量a二进制的最低位n位舍弃,最高的n位补齐数值由运算符类型决定,若是有符号整数则补齐符号位(正为0,负为1),若是无符号整数则补齐0,与左移类似

自增、自减运算符

定义

两者都是特殊的算术运算符,同时也是一元运算符,只能对变量进行运算

用法

++i,–i 在使用i之前,先使i的值加/减1(先增减,后运算)

​ i++,i-- 在使用i之后,使i的值加/减1(先运算,后增减)

例子

int i=3,j;
j=++i;//i的值先变成4,再赋给j,j的值为4

输出验证:

int i=3;
printf("%d",++i);//输出4
int i=3,j;
j=i++;//先将i的值3赋给j,j的值为3,然后i变成4

输出验证:

int i=3;
printf("%d",i++);//输出3

结合性

自右向左

例子

如:i=2, j=-i++
等价于:j=-(i++)
即 :j =-i ; i=i++
由于“++”和“- -”是同优先级,所以结果j的值是-2 ,i的值是3

程序验证:

#include(stdio.h)
int main()
{
  int j,i=2;
  j=-i++;
  print("j=%d,i=%d",j,i);
}  

输出结果为:
j=-2,i=3

注意点

1.谨慎使用该两种运算符,只用最简单的形式,即i++,i–,且把它们作为单独的表达式使用,
不与其他运算符结合运算,减少难度
2.自增自减运算,常用于循环语句,是循环变量加或减1;以及指针变量中,是指针指向下或上一个地址
3.自增自减运算符不能用于长量和表达式

总结

简要总结位运算符和自增自减运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值