移位操作符,位操作符,函数调用符,逗号表达式,下标引用操作符

本文介绍了计算机编程中的位移操作符(左移和右移)、原码、反码和补码概念,以及位操作符如按位与、或、异或和取反的用法。重点讲述了如何使用位操作解决两个数交换问题,并通过示例演示了逗号表达式的执行顺序和数组下标引用。
摘要由CSDN通过智能技术生成

移位操作符移动的是二进制位
          >>  右移
          <<  左移
 (移位操作符的操作数只能是整数,小数编译器会直接报错)

【原码、反码和补码已经在上一篇介绍过了:CSDN

左移操作符

规则——左边抛弃,右边补零

具体操作如下:(将a向左移动1位,正数负数操作一样)


右移操作符

右移运算有两种:逻辑右移:右边丢弃,左边用零补齐
                             算数右移:左边用原该值的符号位填充,右边丢弃
                  当前常见的编译器都是算数右移,不会出现逻辑右移的结果

  *注意:移动位数要用正数表示,负数是标准未定义的行为且不宜大于32位,超出范围计算结果就毫无意义了。

 "对正数负数左移一位都有*2的效果 ,正数右移有/2效果,负数右移有特殊情况,大部分也是有/2效果"

复合赋值可以表示成:a>>=1        a<<=1

                                    a>>=-1       a<<=-1 

这个和加减的复合赋值类似。

位操作符:&、 |、 ^、 ~
  
& ——按位与            &&——逻辑与
|  ——按位或             |  |——逻辑或
^ ——按位异或    
~ ——按位取反

(操作数都要是整数)

下面是对这四个位操作符的用法做一个简单的讲解

&
     &对应的二进制位有0则与0,都1则与1,如下:

|

        | 对应的二进制位有1即1,全0则0,如下:

^

      ^ 对应的二进制位相同为0,相异为1,如下:

~

       ~对应的二进制位是0的变成1,1的变成0,如下:

这里我们给出一个题目:只可以使用两个变量实现两个数交换的问题

我们可以使用下面这种简单的方法,但是这种方法有一个严重的问题:int类型的整型有一定的存储范围,当a,b的数值很大,且单个值不超过整型的范围,而a+b的值超出整型的范围就会导致存储丢失,得出结果错误。

而这里使用^就很好的解决了这个问题

这里我们讲下这个方法:

a^a=0   ——    相同的两个数字异或结果就是0
0^a=a   ——    0和任何数字异或的结果就是那个数字 

通过这个例子得出的两个结论就可以很好的解释这个方法,

为了加深理解以上操作符,下面给出相关的简单练习:

位操作符和位移操作符的简单练习  请看: CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/138167738                

 逗号表达式:

形式:由逗号隔开的多个表达式

特点:从左向右依次执行,整个表达式的结果是最后一个表达式的结果

#include <stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int c = 6;
	if (b = a + 6, a = a + 2, c < 8)
	{


	}
	
	return 0;
}

 在这里面if语句判断的标准就是最后一个表达式:c<a+c+b,但是我们还是必须要从左向右一次计算表达式,最后再看最后一个表达式。就比如在上面的程序中如果前面的表达式影响到了c,那么最后一个表达式的结果就和原来会有差异。


[ ] 下标引用操作符
  操作数:一个数组名+一个索引值(下标)

int arr[10]={0};

printf(“%d”,arr[1]);——这里的[]就是  下标引用操作符 
arr是数组名  
2就是索引值

()函数调用符
  printf(“holle world”)    这里的()就是函数调用符
  有一个或多个操作数:第一个操作数是函数名;其他的都是传给函数的参数

:函数调用符最少一个操作数(函数名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值