【C语言基础】->位运算详细解析->位运算的使用

Ⅰ 位运算的定义

我们知道程序中的所有数据,都是以二进制的方式存储在计算机中的。位运算就是基于二进制的位进行的运算,直接对整数的二进制位进行操作。因此考虑位运算有两个锚点:二进制,补码
注意:计算机中所有的运算都没有位运算快

Ⅱ 位运算的符号

C语言中有以下六种位运算:

  1. ~ : 按位取反(单目运算)
  2. & : 按位与
  3. | : 按位或
  4. ^ : 按位异或
  5. << : 左移
  6. >> : 右移

Ⅲ 位运算的验证及分析

a.按位取反 ~

以下为测试代码:👇

#include <stdio.h>

int main() {
   
	int a = 1;
	int b = ~a;

	printf("a:%d b:%d\n", a, b);

	return 0;
}

我们令a = 1,对其取反,得到结果如下👇
在这里插入图片描述
可以看到,对1取反结果是-2,为什么会这样?我们通过二进制和补码两个锚点做以下分析。

1为int类型,即32位,所以1的补码为:
(0000 0000 0000 0000 0000 0000 0000 0001)
对其按位取反,得到以下补码:
(1111 1111 1111 1111 1111 1111 1111 1110)
将这个补码化成原码,第一位为字符位,其余按位取反末位加1:
(1000 0000 0000 0000 0000 0000 0000 0010) = -2

这便是-2的来历。

b.按位与 &

以下为测试代码👇

#include <stdio.h>

int main() {
   
	int a = 1;
	int b = 0;

	printf("a & b = %d\n", a & b);
	printf("~a & b = %d\n", ~a & b);
	printf("a & ~b = %d\n", a & ~b);
	printf(
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值