C/C++操作符详解(%,/,>>,<<,^,&,|,~,&&,||)

C语言中操作符有很多,如“%,/,>>,<<,^,&,|,~,&&,||”等,在阅读完本篇文章之后,相信你会对他们有较为清晰的认识。

模%

%表示取模运算,计算结果是一个除式的余数。

需要注意的是,取模运算两边都必须是整数,否则会报错。

#include 
using namespace std;
int main()
{
	int a=5;
	int b=2;
	printf("%d",a%b);
	return 0;
}

结果为:

1

除/

计算的结果为一个除式的商,即整数部分。

#include 
using namespace std;
int main()
{
	int a=5;
	int b=2;
	printf("%d",a/b);
	return 0;
}

结果为:

2

移位操作符<< >>

        >>右移操作符

>>为右移操作符,移动的是二进制位。

移位方式分两种:(一般为算术右移)

1.算术右移:移动n位,即除以2的n次方,右边丢弃,左边补原符号位,正0负1

2.逻辑右移:右边丢弃,左边补零。不用考虑符号位。

#include 
using namespace std;
int main()
{
	int a=16;
	int b=a>>1;
	printf("%d",b);
	return 0;
}

结果为:

8

算术右移,移动的是二进制位,因为计算机存储数据是32个比特位,所以16的二进制位00000000000000000000000000010000,向右移动一位,左边补原符号位,就是补一个0,然后换算成十进制就是8,也就是除了一个2。

如果移位较多,比如移动了六位七位八位,那么结果就是0。

        <<左移操作符

#include 
using namespace std;
int main()
{
	int a=16;
	int b=a<<1;
	printf("%d",b);
	return 0;
}

结果为:

32

左移的移位方式就是:左边丢弃,右边补零。也就相当于乘了一个2。

按位操作符(&,^,|)

& 按位与:两个全为1才为1

| 按位或:两个全为0才为0

^ 按位异或:相同为0,相异为1(关于按位异或,我在小结处附上了一串代码,相信你会很感兴趣并感到非常amazing)

#include 
using namespace std;
int main()
{
	int a=5;
	int b=3;
	int c=a&b;
	printf("%d",c);
	return 0;
}

结果为:

1

解析:

按位与

5的二进制为:101

3的二进制为:011

做与计算得: 001

所以得到结果为:1

#include 
using namespace std;
int main()
{
	int a=5;
	int b=3;
	int c=a|b;
	printf("%d",c);
	return 0;
}

结果为:

7

大家根据按位与的解法,理解之后很容易得出的答案。

#include 
using namespace std;
int main()
{
	int a=5;
	int b=3;
	int c=a^b;
	printf("%d",c);
	return 0;
}

结果为:

6

大家根于按位与的解法,理解之后很容易得出的答案。

按位取反 ~

按位取反按的是二进制位,0变1,1变0,最后输出十进制数字。先看代码:

#include 
using namespace std;
int main()
{
	int a=0;
	printf("%d",~a);
	return 0;
}

结果为:

-1

这里你可能比较懵逼,不过莫慌,理解之后你会发现并不难。

代码中先定义整形变量a=0,然后输入a的按位取反之后的结果。我们知道a本来是32个0,计算机存储数据用补码形式存储,a的补码依然是32个0。按位取反后得到32个1,这时得到的是所求数字的补码形式,但是输出应该是原码而得到的是补码,所以补码减一再取反就得到原码,取反的时候符号位不变,其他取反,输出结果为-1。

逻辑与&&

&&只要有一个为假就为假。

#include 
using namespace std;
int main()
{
	int a=0;
	int b=1;
	if(a&&b){
		printf("两者都为真");
	}
	else{
		printf("至少有一个为假");
	}
	return 0;
}

结果为:

至少有一个为假

因为a=0为假,所以无法进入if语句,输出结果就是“至少有一个为假”。如果两者都为真,那么输出“两者都为真”。

逻辑或||

||只要有一个为真就为真。

#include 
using namespace std;
int main()
{
	int a=0;
	int b=1;
	if(a||b){
		printf("至少有一个为真");
	}
	else{
		printf("两者都为假");
	}
	return 0;
}

结果为:

至少有一个为真

小结

以上就是我所总结的常见的操作符的常见用法,当然你看了这些之后也只是对这些操作符有一个大致的了解,可能你并不清楚它有什么作用,这需要你不断地做题慢慢认识,不过我要告诉你的是,它们非常有用。

比如按位操作符^,合理使用它可以实现不创建变量交换两个变量的值,代码附上,感兴趣的话可以去了解一下,这里不再赘述。

#include 
using namespace std;
int main()
{
	int a=5;
	int b=3;
	a=a^b;
	b=a^b;
	a=a^b;
	printf("%d %d",a,b);
	return 0;
}

结果为:

3 5

你可能感兴趣的:(C/C++笔记总结,c++,c语言,算法)