中小企业建站是什么,微信公众号绑定网站,宁波免费建站,深圳市建设主管部门门户网站文章目录 前言一、n(n-1)的运用场景(n为整数)二、1 和 的应用场景总结 前言
本篇文章介绍利用c语言的位操作符解决一些练习题#xff0c;目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符
操作符含义按位与|按位或^按位异或~按位… 文章目录 前言一、n(n-1)的运用场景(n为整数)二、1 和 的应用场景总结 前言
本篇文章介绍利用c语言的位操作符解决一些练习题目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符
操作符含义按位与|按位或^按位异或~按位取反(包括符合位)左移右移
表1.1 位操作符表 注意
位操作符除~为单目操作符外其余均为二目操作符即有两个操作数参加位操作符的对象只能是整型或字符型数据。 一、n(n-1)的运用场景(n为整数) 题目求一个整数存储在内存中的二进制位中1的个数补码中1的个数 n(n-1)的过程如下假设n 15
图1.1 n(n-1)过程图 不断通过n(n-1)每一次得到的结果是消去最右边的1 原理不断地向左借位然后利用操作符消去。 代码实现如下
int count_2scomplement_3(int num)
{int count 0;while (num){count;num num (num - 1);}return count;
} 题目判断一个数是不是2的n次方 这到题依然可以利用n(n-1)进行解答如果一个数是2的n次方则意味只有一个1。如果n(n-1)的结果为0那么这个值就是2的n次方。 代码实现如下
int main()
{int num 0;scanf(%d, num);if (0 (num (num - 1)))printf(%d is 2^n\n, num);elseprintf(%d is not 2^n\n,num);return 0;
}题目两个int32位整数的m和n二进制表达式中有多少个不同的位 这道题的思路是m与n进行异或运算后得到m和n的不同位即1的个数就是不同位的个数此时这题又回到了统计1的个数即第一题的解法。 代码实现如下
int main()
{int m 0;int n 0;int ret 0;scanf(%d %d, m, n);int a (m ^ n);while(a){ret;a a(a-1);}printf(%d, ret);return 0;
}二、1 和 的应用场景
利用1和可以统计一个二进中1或者0的个数 利用1和也可以获得任意一个位的值。 题目求一个整数存储在内存中的二进制位中1的个数补码中1的个数 利用1和进行解题代码实现如下
int count_2scomplement_2(int num)
{int count 0;int rightmovetimes 0;for (rightmovetimes 0; rightmovetimes 32; rightmovetimes){if ((num rightmovetimes) 1){count;}}return count;
}num rightmovetimes) 1 1,则统计1的个数为0则统计0的个数。 获取一个整数二进制序列中所有的奇数位和偶数位分别打印二进制序列 要求从高位开始打印 这道题的思路依然是利用1和从高位开始 代码实现如下
int main()
{int num 0;scanf(%d, num);int i 0;//打印奇数位for (i 30; i 0; i -2 ){printf(%d, (num i) 1);}printf(\n);//打印偶数位for (i 31; i 1; i - 2){printf(%d, (num i) 1);}return 0;
}总结
本篇文章叙述了n(n-1)和1、的应用场景。