位操作的应用:判断一个数是不是2的幂数,实现循环移位【位操作】(55)
- 判斷一個(gè)數(shù)是不是2的冪數(shù)
- 實(shí)現(xiàn)循環(huán)移位
- 圖解說(shuō)明
- 循環(huán)左移一位結(jié)果說(shuō)明
- 循環(huán)右移三位結(jié)果說(shuō)明
- 移動(dòng)過(guò)程說(shuō)明
- 循環(huán)左移一位過(guò)程說(shuō)明
- 循環(huán)右移兩位過(guò)程說(shuō)明
- 代碼演示
判斷一個(gè)數(shù)是不是2的冪數(shù)
怎么證明一個(gè)數(shù)是2的冪數(shù)呢?
在位操作中:
我們發(fā)現(xiàn)上面的形式是2的冪數(shù),也就是所有位中只有單個(gè)位是1的時(shí)候這個(gè)數(shù)就是2的冪數(shù)。
例如:
減去1
哪兒上面的變化有什么特點(diǎn)呢?
那就是如果一個(gè)數(shù)和一個(gè)數(shù)減去一按位& 結(jié)果為 0。
我們通過(guò)代碼進(jìn)行演示:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>typedef enum _BOOL {FALSE, TRUE }BOOL; //判斷一個(gè)數(shù)是不是2的冪數(shù)BOOL Is2Idempotent(unsigned num) {if ((num) & (num - 1))return FALSE;return TRUE; }int main() {while (1){printf("cls");unsigned num;printf("pls input num:");scanf("%d", &num);if (Is2Idempotent(num))printf("%d是2的冪數(shù)\n",num);elseprintf("%d不是2的冪數(shù)!!!\n",num);}return 0; }運(yùn)行結(jié)果為:
實(shí)現(xiàn)循環(huán)移位
圖解說(shuō)明
循環(huán)左移一位結(jié)果說(shuō)明
下面體現(xiàn)循環(huán)左移動(dòng)一位的效果:
循環(huán)左移動(dòng)兩位的效果:
循環(huán)右移三位結(jié)果說(shuō)明
循環(huán)右移三位的效果:
移動(dòng)過(guò)程說(shuō)明
循環(huán)左移一位過(guò)程說(shuō)明
初始數(shù)據(jù)
初始數(shù)據(jù)左移一位:
初始數(shù)據(jù)右移七位:
左移和右移結(jié)果取|就得到了初始數(shù)據(jù)的左移一位:
循環(huán)右移兩位過(guò)程說(shuō)明
初始數(shù)據(jù):
初始數(shù)據(jù)右移兩位:
初始數(shù)據(jù)左移六位:
把移動(dòng)后的數(shù)據(jù)按位 |
代碼演示
void circleMove(int *data ,int n);當(dāng) n>0 的時(shí)候左移,n<0 的時(shí)候循環(huán)右移。
代碼演示:
運(yùn)行結(jié)果為:
注意體會(huì)循環(huán)移位的好處:
循環(huán)移位不會(huì)導(dǎo)致數(shù)據(jù)丟失,那么我們就可以通過(guò)循環(huán)移位實(shí)現(xiàn)對(duì)于數(shù)據(jù)的加密。
總結(jié)
以上是生活随笔為你收集整理的位操作的应用:判断一个数是不是2的幂数,实现循环移位【位操作】(55)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 位操作的应用:无参数交换数据,异或加密,
- 下一篇: Wireshark软件的安装,进行数据包