Bitwise Operation Explained
原文链接:Bitwise Operation Explained
1.统计一个数置位为1的个数
int __numOf_SET_Bits(int var)
{
if (var==0) return 0;
else return (var&01)?1+__numOf_SET_Bits(var>>1):__numOf_SET_Bits(var>>1);
}
int main()
{
int var=128;
printf("Num of Bits: %d\n",__numOf_SET_Bits(var));
return 0;
}
2,判断一个数是奇数还是偶数
#define isEven(a) ((((a)&01)==0)?1:0)
int main()
{
int var=1;
if(isEven(var))
{
printf("%d is a even number \n",var);
}
else
printf("%d is a odd number \n",var);
return 0;
}
方法二:
#define isEven(a) ((((a)%2)==0)?1:0)
int main()
{
int var=11;
if(isEven(var))
{
printf("%d is a even number \n",var);
}
else
printf("%d is a odd number \n",var);
return 0;
}
3,判断一个数是否是2的幂次方
#define __isPower_of_TWO(a) (((a)&(a-1))==0)?1:0
int main()
{
int arr[] = {1,2,3,4,5,8,9,16};
int i=0;
for(;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (__isPower_of_TWO(*(arr+i)))
printf("%d has a form of Power of Two \n",*(arr+i));
else
printf("%d is not in the form \n", *(arr+i));
}
return 0;
}
方法二:
#define __isPower_of_TWO(a) (((a)&(-a))==a)?1:0
int main()
{
int arr[] = {1,2,3,4,5,8,9,16};
int i=0;
for(;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (__isPower_of_TWO(*(arr+i)))
printf("%d has a form of Power of Two \n",*(arr+i));
else
printf("%d is not in the form \n", *(arr+i));
}
return 0;
}
方法三:
#include <stdlib.h>
int __numOf_SET_Bits(int var)
{
if (var==0) return 0;
else return (var&01)?1+__numOf_SET_Bits(var>>1):__numOf_SET_Bits(var>>1);
}
int main()
{
int arr[] = {1,2,3,4,5,8,9,16};
int i=0;
for(;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (__numOf_SET_Bits(arr[i])==1)
printf("%d has a form of Power of Two \n",*(arr+i));
else
printf("%d is not in the form \n", *(arr+i));
}
system("pause");
return 0;
}
4,不使用第三个数,交换两个数
void __SWAP(int *a,int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
int main()
{
int a=5, b=6;
printf("Before swap: a=%d <=====> b=%d \n",a,b);
__SWAP(&a,&b);
printf("After swap: a=%d <=====> b=%d \n",a,b);
return 0;
}
5,异或双向链表
#include <stdlib.h>
#include <assert.h>
typedef struct XOR_based_Node
{
int data;//数据域
unsigned long compressedAddress;
}node;
node* head = NULL;//异或双向链表表头
void add_element_to_list(node** headRef, int data)
{//插入表头
node *newNode = (node*)malloc(sizeof(node));
assert(newNode);
newNode->compressedAddress = (unsigned long)(*headRef);
newNode->data = data;
if(*headRef != NULL)
(*headRef)->compressedAddress ^= (unsigned long)newNode;
*headRef=newNode;
}
void printList(node* head)
{//输出表
unsigned long prev = 0;
while(head)
{
unsigned long next = prev ^ head->compressedAddress;
printf("%d ", head->data);
prev = (unsigned long)head;
head = (node *)next;
}
printf("\n");
}
int main(void)
{
int i=0;
for(;i<10;i++)
add_element_to_list(&head,i);
printList(head);
return 0;
}
Bitwise Operation Explained相关推荐
- 位运算::Bitwise operation
最近学习做cf,第一题永远都是该死的Bitwise operation,好好学习了一下位运算的知识. NOT: The bitwise NOT, or bitwise complement, is a ...
- Bitwise Operation
Bitwise operator in C/C++ 歡迎來到二進位的世界.電腦資料都是以二進位儲存,想當然程式語言的變數也都是以二進位儲存.在 C/C++ 當中有幾個位元運算子: << S ...
- TensorRT(4)-Profiling and 16-bit Inference
前面几节以 LeNet 为例主要介绍了 tensorRT 的简单使用流程.包括,使用 tensorRT 的 NvCaffeParser 工具以及底层 C++ API 来 模型 caffe 解析,构建 ...
- latex 表格中虚线_如何识别和修复表格识别中的虚线
latex 表格中虚线 When documents are digitalized via scanning or via photo, the image quality can suffer f ...
- lua 5.3 英文手册
http://www.lua.org/manual/5.3/manual.html lua 5.3 英文手册 Lua Lua 5.3 Reference Manual by Roberto Ierus ...
- opensips 配置文件
opensips 配置文件 Upon installation, the default configuration file path is : [INSTALL_PATH]/etc/opensip ...
- phpredis手册
介绍 phpredis是可以通过pecl以扩展的方式redis.so或者redis.dll安装到php的扩展中,通过配置php.ini来启用. phpredis在pecl中的地址是http://pec ...
- 《Kotlin极简教程》第三章 Kotlin基本数据类型
正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item ...
- 一文详解基于先验地图的视觉定位
作者丨cc.fy@知乎 来源丨https://zhuanlan.zhihu.com/p/460001686 编辑丨3D视觉工坊 问题定义 给定一份高精度地图或环境模型,给定相机(不限于单目,双目,多目 ...
最新文章
- Maven 模块继承、聚合
- Emmet插件:HTML/CSS代码快速编写神器
- fileupload.class.php,php文件上传类
- 工作183:动态渲染数据 数据在数字字典里面
- LeetCode 题 - 58. 最后一个单词的长度 python解答
- 正则表达式30分钟入门教程-2
- ctrl+下箭头无法到最底端_设计院10年精选,最常用的CAD命令,绘图牛人都在用...
- er图用什么软件_太牛逼!一款软件几乎可以操作所有的数据库!
- android c语言串口通信,安卓串口通信能用的modebus CRC16计算,附对应的C语言CRC16
- Python秒求四位玫瑰数
- 35+大龄程序员被清退?
- java指标计算_java – 使用JMH计算指标
- 吐血整理的几十款小程序登陆界面【附完整代码】
- PyTorch Bert文本分类
- RDP Wrapper
- win7 计算机定时关机脚本,电脑设置定时关机的方法 win7系统怎么设置定时关机...
- NYOJ1016(德莱联盟)(判断线段相交)
- 什么专业可以留学计算机动画,美国留学计算机动画专业怎么样?
- 广发信用卡联名南航,申卡这样操作
- 269个JavaScript工具函数,助你提升工作效率(上)