C++ 11 深度学习(七)位运算常见操作

1. 取出数中任意k位置的二进制位是0还是1

n >> k & 1 原理:先把想要取出的位置移动到个位,1的二进制是 0001 , 进行与操作就可以提取出最后一位是0还是1;二进制是从右向左,由低到高,从0到7。

2. 右移操作 等于 n / 2^k , 左移操作 == n * 2 ^ k

3.取一个字节任意区间的十进制数,设置(辅助字节)全部位设置为0,根据想要获取的目标字节的区间,设置(辅助字节二进制位)中的对应区间部分,全部换成1,然后转为16进制。做&操作,按位与的结果就是目标自己区间的十进制表示形式。例如 0x67 & 0x1f = 7 ,01100111 & 00011111 (从0x67中取出该字节0-4后五位十进制表示)【注意:二进制的左边是高位,右边是低位,所以需要进行右移操作将需要获取的部分与最低位重合】例如0x80二进制位1000 0000 取出10的十进制操作为0x80 & 0xC0 >> 6,对于0x67取后五位的情况不需要进行结果右移操作,其他情况均需要视情况进行右移

#include <iostream>
#include <bitset>

using namespace std;

int main() {
    unsigned char originalByte = 0x67;

    unsigned char mask = 0;

    mask |= (1 << 0);
    mask |= (1 << 1);
    mask |= (1 << 2);
    mask |= (1 << 3);
    mask |= (1 << 4);
    

    unsigned char result = originalByte & mask;

    cout << "Original Byte: 0x" << hex << (int)originalByte << endl;
    cout << "Mask: 0x" << hex << (int)mask << endl;
    cout << "Result: 0x" << hex << (int)result << endl;

    return 0;
}

4.两个字节合并成一个16位short类型

unsigned short func = 0;
 
func = func | data[7];
func = func << 8;
func = func | data[8];

5.lowbit

作用:取出二进制最后的1,例如整数2的二进制位是0010那么会取出10的部分。

应用:统计有多少个1。

思路:使用给定整数减去其中的最后一位1。

#include <iostream>
using namespace std;

int lowbit(int x)
{
	return x & -x;
}

int main()
{
	int x;
	cin >> x;
	int res = 0;
	while (x) x -= lowbit(x), res++;
	cout << res << endl;
	return 0;
}

6.判断一个int变量是正还是负

#include <iostream>

using namespace std;

int main()
{
    int num = -10;
    // 判断正负值
    if (num & (1 << 31)) {
        std::cout << "正数" << std::endl;
    }
    else {
        std::cout << "负数或者为零" << std::endl;
    
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༄yi笑奈何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值