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

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

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

开门见山的说:

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

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

目录

整数二进制表现形式

&操作符,按位与操作符

|操作符,按位或操作符

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

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


整数二进制表现形式

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

正数

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

比如:3的原码

00000000000000000000000000000011

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

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

正数的反码和补码,还有原码都是一样的。

3的反码↓↓↓

00000000000000000000000000000011

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

3的补码↓↓↓

00000000000000000000000000000011

负数

比如:-3的原码

10000000000000000000000000000011

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

-3的反码↓↓↓

1111111111111111111111111111100

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

-3的补码↓↓↓

11111111111111111111111111111001


&操作符,按位与操作符

#include<stdio.h>
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<stdio.h>
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<stdio.h>
int main()
{
	int a = 3;
	int b = -5;
	int c = a ^ b;

	printf("%d", c);

	return 0;
}

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

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

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

相异为一,相同为零

结果:10000000000000000000000000001000

不难看出这个数是8.


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

#include<stdio.h>
int main()
{
	int a = 5;
	int b = a << 1;
	int c = a>> 1;
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);

	return 0;
}


00000000000000000000000000000101 -> 5的补码

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

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

b结果:

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

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

c结果:

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



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

    Thanks♪(・ω・)ノ

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值