系统硬件运算

问题:
把地址为0x80040的寄存器的最低4位设置为0110

解决方案:
使用位操作

什么是位?
内存的基本单元是字节, 一个字节有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; //822*2 = 64

右移
如果左操作数是无符号类型,则左边多出来的位用 0 来填充。
如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。
向左移动 n个位置,就等同于除以 2的n次方

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

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

应用:
把一个整数的的最低4位设置为0110
cout << "请输入一个整数: " << endl;
cin >> x;

//把x的最低4位清0
x = x & (~15);

//把x的最低4位设置为0110
x = x | 6;

cout << “x=” << x << endl;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值