C语言getint的头文件是什么,C语言位操作的算法

#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--;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值