栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】&|^整数按位与/或/异或操作符——二进制详解(实例分析)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】&|^整数按位与/或/异或操作符——二进制详解(实例分析)

作者目前就读于,双非本科,大一,很多地方理解不当还望各位大佬耐心教导。万分感谢!

 本文为C语言的小事系列,喜欢的同志可以订阅本专栏点→这里这里,都是在下学习时总结的精华,希望对您有所帮助。

开门见山的说:

整数的二进制表示形式有原码,反码,补码这三种形式,而整数存储在内存中是存储的补码形式。

而且&  |   ^  操作符也是通过操作补码实现的。

目录

整数二进制表现形式

&操作符,按位与操作符

|操作符,按位或操作符

^操作符,按位异或操作符

右移操作符>>和<< 左移操作符


整数二进制表现形式

此处演示的为32位处理器。

正数

原码就是一个整数的二进制形式

比如:3的原码

00000000000000000000000000000011

反码顾名思义就是原码反过来

符号为不变,其他位按位取反

3的反码↓↓↓

0111111111111111111111111111100

正数的补码和原码是一样的

3的补码↓↓↓

00000000000000000000000000000011

负数

比如:-3的原码

10000000000000000000000000000011

符号为不变,其他位按位取反

-3的反码↓↓↓

1111111111111111111111111111100

负数的补码和正数的不一样,为反码+1;

-3的补码↓↓↓

11111111111111111111111111111001


&操作符,按位与操作符
#include
int main()
{
	int a = 3;
	int b = -5;
	int c = a & b;

	printf("%d", c);

	return 0;
}

写出-5和3的补码

00000000000000000000000000000011-> 3的补码
11111111111111111111111111111011  -> -5的补码

当你使用&时编译器就开始对补码进行操作了

开始按位有0则0,两边为1才为1

结果:00000000000000000000000000000011

不难看出这个数是3.


 

|操作符,按位或操作符
#include
int main()
{
	int a = 3;
	int b = -5;
	int c = a | b;

	printf("%d", c);

	return 0;
}

00000000000000000000000000000011-> 3的补码
11111111111111111111111111111011  -> -5的补码

当你使用|时编译器就开始对补码进行操作了

开始按位有1则1,两边为0才为0

结果:11111111111111111111111111111011

不难看出这个数是5.


 

^操作符,按位异或操作符
#include
int main()
{
	int a = 3;
	int b = -5;
	int c = a ^ b;

	printf("%d", c);

	return 0;
}

00000000000000000000000000000011-> 3的补码
11111111111111111111111111111011  -> -5的补码

当你使用^时编译器就开始对补码进行操作了

开始按位,相同为1,不同为0;

结果:10000000000000000000000000001000

不难看出这个数是8.


 

右移操作符>>和<< 左移操作符
#include
int main()
{
	int a = 5;
	int b = a << 1;
	int c = a>> 1;
	printf("%dn", a);
	printf("%dn", b);
	printf("%dn", c);

	return 0;
}


00000000000000000000000000000101 -> 5的补码

当你使用<<和>>时编译器就开始对补码进行操作了

<<整体向左移动一位,最左边一位舍去,最右边补一位0;

b结果:

 

算术右移:>>整体向右移动一位,最右边一位舍去,最左边补原符号位;

还有一种逻辑右移:最左边补0

c结果:

 

不难看出这两数是10和2.



哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧

    Thanks♪(・ω・)ノ

(期待一下,要是有分享和收藏更好啦)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号