校外实训、程序实践--使用二进制的数据优化技巧

一、基本概念

 

用于对整数类型(int,char, long 等)变量中的某一位(bit),  或者若干位进行操作。

比如: 判断某一位是否为1 只改变其中某一位,而保持其他位都不变。

C/C++语言提供了六种位运算符来进行位运算操作

二、六种基本操作

&    按位与      

|    按位或

^    按位异或

~    按位取反

<<    左移

>>    右移

博客:(10条消息) 位运算符详解(&,|,~,^,<<,>>)_-小麦子-的博客-CSDN博客

三、lowbit(n)运算

lowbit(n)的意思是将n转化成二进制数之后,只保留最低位的1及其后面的0,得到的十进制数。

作用:返回n的最右边的那一位1和它右边的0然后它对应的十进制数

四、n的二进制表示中第k位是几

五、例题应用

·二进制中1的个数(lowbit料理)

#include <iostream>
using namespace std;

int lowbit (int n)
{
	return n&(-n);
}
int main()
{
	int n;
	cin>>n;
	int res=0;
	while(n)
	{
		n-=lowbit(n);
		res++;
	}
	printf("%d\n",res);
	return 0;
}

·二进制中1的最低位位置

·方法:打表法+lowbit

·一些知识点介绍:

<<    左移--------

1 <<    K 得到 2^K 也就是第K位为1的二进制数 因此: Log2( 1<<K) = K

 用打表法计算 Log[1<<16]--------

 ·本题代码:

 log[]数组存储的就是log[i]是几(底数是2)

该数组的赋值方式:自己写的bulidlogtable函数 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值