原文链接:Bitwise Operation Explained

1.统计一个数置位为1的个数

#include <stdio.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 var=128;
    printf("Num of Bits: %d\n",__numOf_SET_Bits(var));
    return 0;
}

2,判断一个数是奇数还是偶数

#include <stdio.h>
#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;
}

方法二:

#include <stdio.h>
#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的幂次方

#include <stdio.h>
#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;
}

方法二:

#include <stdio.h>
#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 <stdio.h>
#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,不使用第三个数,交换两个数

#include <stdio.h>
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 <stdio.h>
#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相关推荐

  1. 位运算::Bitwise operation

    最近学习做cf,第一题永远都是该死的Bitwise operation,好好学习了一下位运算的知识. NOT: The bitwise NOT, or bitwise complement, is a ...

  2. Bitwise Operation

    Bitwise operator in C/C++ 歡迎來到二進位的世界.電腦資料都是以二進位儲存,想當然程式語言的變數也都是以二進位儲存.在 C/C++ 當中有幾個位元運算子: << S ...

  3. TensorRT(4)-Profiling and 16-bit Inference

    前面几节以 LeNet 为例主要介绍了 tensorRT 的简单使用流程.包括,使用 tensorRT 的 NvCaffeParser 工具以及底层 C++ API 来 模型 caffe 解析,构建 ...

  4. latex 表格中虚线_如何识别和修复表格识别中的虚线

    latex 表格中虚线 When documents are digitalized via scanning or via photo, the image quality can suffer f ...

  5. lua 5.3 英文手册

    http://www.lua.org/manual/5.3/manual.html lua 5.3 英文手册 Lua Lua 5.3 Reference Manual by Roberto Ierus ...

  6. opensips 配置文件

    opensips 配置文件 Upon installation, the default configuration file path is : [INSTALL_PATH]/etc/opensip ...

  7. phpredis手册

    介绍 phpredis是可以通过pecl以扩展的方式redis.so或者redis.dll安装到php的扩展中,通过配置php.ini来启用. phpredis在pecl中的地址是http://pec ...

  8. 《Kotlin极简教程》第三章 Kotlin基本数据类型

    正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item ...

  9. 一文详解基于先验地图的视觉定位

    作者丨cc.fy@知乎 来源丨https://zhuanlan.zhihu.com/p/460001686 编辑丨3D视觉工坊 问题定义 给定一份高精度地图或环境模型,给定相机(不限于单目,双目,多目 ...

最新文章

  1. Maven 模块继承、聚合
  2. Emmet插件:HTML/CSS代码快速编写神器
  3. fileupload.class.php,php文件上传类
  4. 工作183:动态渲染数据 数据在数字字典里面
  5. LeetCode 题 - 58. 最后一个单词的长度 python解答
  6. 正则表达式30分钟入门教程-2
  7. ctrl+下箭头无法到最底端_设计院10年精选,最常用的CAD命令,绘图牛人都在用...
  8. er图用什么软件_太牛逼!一款软件几乎可以操作所有的数据库!
  9. android c语言串口通信,安卓串口通信能用的modebus CRC16计算,附对应的C语言CRC16
  10. Python秒求四位玫瑰数
  11. 35+大龄程序员被清退?
  12. java指标计算_java – 使用JMH计算指标
  13. 吐血整理的几十款小程序登陆界面【附完整代码】
  14. PyTorch Bert文本分类
  15. RDP Wrapper
  16. win7 计算机定时关机脚本,电脑设置定时关机的方法 win7系统怎么设置定时关机...
  17. NYOJ1016(德莱联盟)(判断线段相交)
  18. 什么专业可以留学计算机动画,美国留学计算机动画专业怎么样?
  19. 广发信用卡联名南航,申卡这样操作
  20. 269个JavaScript工具函数,助你提升工作效率(上)

热门文章

  1. 第二章 Jackson属性名转换+属性忽略
  2. PHP Object对象转换为Array数组
  3. 了解这12个概念,让你的JavaScript水平更上一层楼
  4. 用 SOLID 原则保驾 React 组件开发
  5. Android NDK开发Crash错误定位
  6. python 多进程multiprocessing 模块
  7. PHP问题 —— Notice: Undefined index:
  8. MySQL utf8mb4字符集配置,支持emoji表情存储
  9. NIC Bonding on CentOS 7 with nmtui
  10. 二叉树的实现(Java语言描述)