c/c++位操作

本文详细介绍了位操作符,包括位与(&)、位或(|)、位非(~)、异或(^)以及左移(<<)和右移(>>)。通过实例展示了它们的运算规则,并解释了它们在内存和数据处理中的作用。位操作符是编程中进行低级别数据操作的重要工具,尤其在处理二进制数据和优化代码时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

什么是位?

位与 &

位或 |

位非 ~

异或 ^

<< 左移

>> 右移


什么是位?

内存的基本单元是字节, 一个字节有8位.

位与 &

0 & 0   0

0 & 1   0

1 & 0   0

1 & 1   1

对应位, 都是1,  结果才是1

// 00001000

// 00000011

// 00000000

cout <<  " 8 & 3 = " << (8 & 3) << endl;  

位或 |

0  |  0   0

0  |  1   1

1  |  0   1

1  |  1   1

对应位, 都是0, 结果才是0

只要有一位是1, 结果就是1

0 | x  x

// 00001000

// 00000011

// 00001011

cout <<  " 8 | 3 = " << (8 | 3) << endl;  

位非 ~

~ 1   0

~ 0   1

取反

// 00001000

// 11110111

unsigned char x = ~8;

cout << (int)x << endl;  //247

异或 ^

0 ^ 0  0

1 ^ 1  0

0 ^ 1  1

1 ^ 0  1

对应位不同, 结果才是1

// 00001000

// 00000011

// 00001011

cout << (8^3) << endl;  //11

<< 左移

右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。

向左移动 n个位置,就等同于乘以 2的n次方

只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)

// 00001000

// 01000000

cout << (8<<3) << endl;   //8*2*2*2 = 64

>> 右移

如果左操作数是无符号类型,则左边多出来的位用 0 来填充。

如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。

向左移动 n个位置,就等同于除以 2的n次方

只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)

// 00001000

// 00000001

cout << (8>>3) << endl;   //1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值