二进制的简单运用
来源:互联网 发布:外贸原单皮鞋淘宝店 编辑:程序博客网 时间:2024/05/18 03:20
把右边连续的1变为0 ---------> x&(x+1)
把右边连续的0变为1---------->x | (x- 1)
取右边连续的1------------------>(x^(x+1))>>1
去掉右边第一个1的左边------>x&(x^(x-1))
判断二进制中的1的个数是偶数个还是奇数个
int have_jo(int x){ x=x^(x>>1); x=x^(x>>2); x=x^(x>>4); x=x^(x>>8); x=x^(x>>16); return x&1;}
计算二进制中1的个数
int number_1(int x){ x=(x& 0x55555555)+((x>>1)& 0x55555555); x=(x& 0x33333333)+((x>>2)& 0x33333333); x=(x& 0x0F0F0F0F)+((x>>4)& 0x0F0F0F0F); x=(x& 0x00FF00FF)+((x>>8)& 0x00FF00FF); x=(x& 0x0000FFFF)+((x>>16)& 0x0000FFFF); return x;}
更新JAVA源码对于计算二进制中1的个数的做法:
public static int bitCount(int i) { // HD, Figure 5-2 i = i - ((i >>> 1) & 0x55555555); i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); i = (i + (i >>> 4)) & 0x0f0f0f0f; i = i + (i >>> 8); i = i + (i >>> 16); return i & 0x3f; }
求二进制的逆序
int dword(int x){ x=(x& 0x55555555)<<1 | (x& 0xAAAAAAAA)>>1; x=(x& 0x33333333)<<2 | (x& 0xCCCCCCCC)>>2; x=(x& 0x0F0F0F0F)<<4 | (x& 0xF0F0F0F0)>>4; x=(x& 0x00FF00FF)<<8 | (x& 0xFF00FF00)>>8; x=(x& 0x0000FFFF)<<16 | (x& 0xFFFF0000)>>16; return x;}
Gray码:Gray码对应的二进制数,相邻的两个Gray码的二进制只改变一个数.
比如说3位的Gray码的顺序为:000->001->011->010->110->111->101->100
获取gray码的方法为:
n xor (n shr 1)得到的是第n个gray码。
- 二进制的简单运用
- 二进制的运用 枚举
- ACM_二进制代替DFS的运用
- 运用二进制生成集合的所有子集
- ERwin的简单运用
- Log4j的简单运用
- ERwin的简单运用
- 克隆的简单运用
- URL的简单运用
- Log4j的简单运用
- XML的简单运用
- Log4j的简单运用
- Lock的简单运用
- 简单的运用CChartCtrl
- HttpServer的简单运用
- 简单的AsyncTask运用
- OnPageChangeListener的简单运用
- DispatchTouchEvent的简单运用
- 软工概述
- Windows:Windows 8安装64位Benq G900HD的显示器驱动
- IOS在线学习好網站收集
- poj 1389
- 链表--结构与指针使用
- 二进制的简单运用
- (wifi)jni层gbk格式中文无损转换成utf格式
- 产生随机数
- hdu 2896 病毒侵袭 (AC自动机)
- HDOJ 骨铺方格
- 《Linux Shell Scripting Cookbook》Linux常用命令笔记(一)
- BOOTMGR is compressed的解决方法
- 《学习OpenCV(中文版)》第4章 练习3a
- IDC3516电流环隔离接口芯片的应用 转 学习