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