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

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

模%

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

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

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

结果为:

1

除/

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

#include <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
using namespace std;
int main()
{
	int a=5;
	int b=3;
	int c=a|b;
	printf("%d",c);
	return 0;
}

结果为:

7

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

#include <iostream>
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 <iostream>
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 <iostream>
using namespace std;
int main()
{
	int a=0;
	int b=1;
	if(a&&b){
		printf("两者都为真");
	}
	else{
		printf("至少有一个为假");
	}
	return 0;
}

结果为:

至少有一个为假

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

逻辑或||

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

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

结果为:

至少有一个为真

小结

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

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

#include <iostream>
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

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:● QT工具(qt设计师,qt预言家,qt助手,qt例子); QT跨平台移植 [url=]Android[/url],[url=]IOS[/url],Windows,Linux, Mac 打包部署 移 ●页面基本控件 动 ●内容区域、列表与对话框应用 框 ●表单控件 架 ●主题定制 与 ●网格布局与页面创建、加载、跳转 设 ●动态内容整合 计 ●插件应用 模 ●设计模式与Boost ,ACE ,QT,cocos2dx详解 工厂模式,单例模式等等23种设计模式 式 ●设计模式与Boost ,ACE ,QT,cocos2dx详解 工厂模式,单例模式等等23种设计模式,UML实战 数 ●动态数组模板库 数组栈 数组队列库,字符串库 据 ●链表模板库,单链表,双链表,环链表 结 ●链式栈,链式队列 数组嵌套与链表嵌套 构 ●二叉树,线索二叉树模板库,优先队列库 部 ●哈弗曼树模板库 分 ●Tree B Tree 模板库 ●最大堆最小堆库 ●红黑树模板库 ●图模板库 ●排序模板库,数组排序,链表排序 ●贪心算法,背包算法,高级递归,动态规划 项 目 打飞机游戏 实 战 下载地址:关注wx公众号feixueteam。 C / C++ 语言的 vector 是一个动态数组容器,它可以根据需要动态地增加或减少元素。通过使用 vector,你可以方便地处理变长数组,而无需手动处理内存分配和释放。在 C++ ,vector 是标准模板库(STL)提供的容器之一,它提供了一系列的方法和操作符,使得对数组的操作更加方便和高效。你可以使用 vector 类型来声明一个变量,并通过调用其方法来添加、删除、访问和修改元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值