1.头文件

 #ifndef _INC_BITOPERATION
#define _INC_BITOPERATION
#endif
/*
封装了所有的位操作运算
*/
#include<stdio.h>
#include<stdlib.h> /************************四字节操作,如int ,long等类型**********************/ /*置位int数num的第N个位*/
void setInt(int *num, int N);
/*清零int数num的第N个位*/
void clearInt(int *num, int N);
/*统计num中是1的位数,返回位数*/
int statIntOne(int num);
/*统计num中是0的位数,返回位数*/
int statIntZero(int num);
/*翻转一个int数,即高位和低位互换 0位和31位互换,1位和30维护换返回位数*/
int reverseInt(int *num);
/*以二进制形式打印一个整数*/
void printfIntBinary(int num);
/*循环左移位的实现num左移N位*/
int moveToLeft(int num, int N);
/*循环右移位的实现num右移N位*/
int moveToRight(int num, int N);
/*使用位运算异或实现两个变量值的交换*/
void exchange(int *a, int *b);
/*获取int数num的第N个位的值,0或1*/
int getIntBit(int num, int N);
/*打印一个int数在内存中的二进制码*/
int printfBinCode(int num);
/*输出一个int数的原码,正数就是它的二进制码,负数就是对应二进制码(反码)的原码*/
void printfSrcCode(int num);
/*打印一个unsigned char 类型的二进制码*/
void printfCharCode(unsigned char s);
/*打印一个浮点数的二进制码*/
void printfFloatCode(float f);

2.源文件

#include<stdio.h>
#include<stdlib.h> /*置位int数num的第N个位*/
void setInt(int *num, int N)
{
if (N > )
{
printf("超出置位范围0-31");
return;
}
*num |= ( << N);
}
/*清零int数num的第N个位*/
void clearInt(int *num, int N)
{
if (N > )
{
printf("超出置位范围0-31");
return;
}
*num &= ~( << N);
}
/*统计num中是1的位数,返回位数*/
int statIntOne(int num)
{
int count = ; for (int i = ; i < ; i++)
{
int t = num & ;
if (t == )
count++; num = num >> ;
}
return count; }
/*统计num中是0的位数,返回位数*/
int statIntZero(int num)
{
int count = ; for (int i = ; i < ; i++)
{
int t = num & ;
if (t == )
count++; num = num >> ;
}
return count; }
/*翻转一个int数,即高位和低位互换 0位和31位互换,1位和30维护换返回位数*/
int reverseInt(int *num)
{ int tem = *num;
for (int i = ; i < ; i++)
{
int t = tem & ;//1.取出每一位的值, //2.将第0位的值置给31,第一位的值置给30
if (t == )//
{
setInt(num, -i);
//printf("%d\n", *num);
}
else
{ clearInt(num, -i);
//printf("%d\n", *num);
}
tem = tem >> ; } return num; }
/*以二进制形式打印一个整数*/
void printfIntBinary(int num)
{
reverseInt(&num);
for (size_t i = ; i < ; i++)
{ int t = num & ;
printf("%d", t);
num = num >> ;
}
}
/*循环左移位的实现num左移N位*/
int moveToLeft(int num,int N)
{
for (int i = ; i < N; i++)
{
int t = num & ( << );//1.取出最高位的值,
num = num << ;//左移一位
//2.先将第0位的值置给31,
if (t != )//
{
setInt(&num, );
//printf("%d\n", *num);
}
else
{ clearInt(&num, );
//printf("%d\n", *num);
}
}
return num; }
/*循环右移位的实现num右移N位*/
int moveToRight(int num, int N)
{
for (int i = ; i < N; i++)
{
int t = num & ;//1.取出每一位的值,
num = num >> ;
//2.先将第0位的值置给31,
if (t == )//
{
setInt(&num, );
//printf("%d\n", *num);
}
else
{ clearInt(&num, );
//printf("%d\n", *num);
} }
return num; }
/*使用位运算异或实现两个变量值的交换*/
void exchange(int *a, int *b)
{
*a = (*a) ^ (*b);
*b = (*a) ^ (*b);
*a = (*a) ^ (*b);
}
/*获取int数num的第N个位的值,0或1*/
int getIntBit(int num, int N)
{
if (N > )
{
printf("超出置位范围0-31");
return;
}
int t = (num & ( << N));
if (t == )
{
return ;
}
else
{
return ;
} }
/*打印一个int数在内存中的二进制码,正数就是它的原码,负数就是它的补码*/
int printfBinCode(int num)
{
int N = ;
while (N >= )
{
if (getIntBit(num,N))
{
printf("");
}
else
{
printf("");
}
N--;
}
}
/*输出一个int数的原码,正数就是它的二进制码,负数就是对应二进制码(反码)的原码*/
void printfSrcCode(int num)
{
if (num >= )
{
printfBinCode( num);
}
else
{
num = num - ;
num = ~num;
setInt(&num, );
printfBinCode(num); }
} /*打印一个unsigned char 类型的二进制码*/
void printfCharCode(unsigned char s)
{
int N = ;
while (N >= )
{
if (getIntBit(s, N))
{
printf("");
}
else
{
printf("");
}
N--;
}
}
/*打印一个浮点数的二进制码*/
void printfFloatCode(float f)
{
unsigned char *p;
p = (unsigned char *)&f;
int M = ;
while (M >= )
{
printfCharCode(*(p + M));
M--;
} }

3.代码说明:包括头文件和源文件,封装了许多位操作函数,都是经过实际测试,可以直接使用

  

C语言位操作的算法的更多相关文章

  1. C语言位操作--奇偶校验算法

    信息是以比特流的方式传输的,类似01000001.在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1.为了检测到这种错误,我们可以通过 ...

  2. 0.数据结构(python语言) 基本概念 算法的代价及度量!!!

    先看思维导图: *思维导图有点简陋,本着循循渐进的思想,这小节的知识大多只做了解即可. *重点在于算法的代价及度量!!!查找资料务必弄清楚. 零.四个基本概念 问题:一个具体的需求 问题实例:针对问题 ...

  3. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  4. C语言 位操作

    c语言位操作中需要注意有: 位操作只针对整型和字符型数据 在右移操作中:对无符号数和有符号中的正数补 0:符号数中的负数,取决于所使用的系统:补 0 的称为“逻辑右移”,补 1 的称为“算术右移”. ...

  5. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  6. C语言版数据结构算法

    C语言版数据结构算法 C语言数据结构具体算法 https://pan.baidu.com/s/19oLoEVqV1I4UxW7D7SlwnQ C语言数据结构演示软件 https://pan.baidu ...

  7. 用scheme语言实现SPFA算法(单源最短路)

    最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...

  8. C语言之广度优先算法

    广度优先算法又称宽度优先搜索,是一种简便的图的搜索算法之一.搜索方式大致是这样的: 直到搜索到目标结点(结点就是那些圆球球,其中有一个或者多个是目标结点)或者搜完了整个图都没找到目标结点就停止搜索. ...

  9. C语言qsort函数算法性能测试

    对于该算法的复杂性.一个直接的方法是测量的一定量的算法级数据的执行时间的感知. 随着C语言提供qsort对于示例.随着100一万次的数据,以测试其计算量.感知O(nlg(n))时间成本: C码如下面: ...

随机推荐

  1. 01_Python简介

    Python 简介 *为什么学习python http://bbs.fishc.com/thread-35584-1-1.html Python 特点 易于学习:Python有相对较少的关键字,结构简 ...

  2. 11. 配置ZooKeeper ensemble

    一个ZooKeeper集群或复制的ZooKeeper服务器集群应该优化配置,以避免出现脑裂(split-brain)等情况. 由于网络分割,同一ensemble的两个不同服务器可能构成领导者不一致,因 ...

  3. 常用接口简析1---IEnumerable、IEnumerator简析

    常用接口的解析(链接) 1.IEnumerable深入解析 2.IComparable.IComparable接口解析 3.IList.IList接口解析      引言: IEnumerable和I ...

  4. Windows下安装BeautifulSoup

    python版本为2.7 1.去官网下载BeautifulSoup4 Beautiful Soup 4.3.2 2.解压文件 将下载得到的压缩包解压到任意文件夹,路径不含中文 3.打开cmd命令提示符 ...

  5. memcached复制-repcached

    1.前言 由于memcached把数据都放到内存里,因此性能是极高的,正因为如此,不可避免会造成数据丢失,repcached就派上用场了,它可以实现memcached的主从复制 2.安装repcach ...

  6. 简单模板view调用

    $this->display();//模板名称与当前控制器.当前操作方法的名称不一致 $this->display();//调用当前控制器对应目录指定名称的模板 $this->dis ...

  7. Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创

    我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...

  8. PL/SQL简单实现数据库的连接

    通常我们都会去选择 通过修改配置文件去实现数据库链接,方法如下:找到你orale 安装下的文件:instantclient_11_2\network\admin 修改的主要有三个地方:上面的命名随便起 ...

  9. Python---初识堡垒机

    在学习堡垒机之前,我们需要首先了解下Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作. SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: ...

  10. .NET Core 快速入门教程

    .NET Core 快速学习.入门系列教程.这个入门系列教程主要跟大家聊聊.NET Core的前世今生,以及Windows.Linux(CentOS.Ubuntu)基础开发环境的搭建.第一个.NET ...