c語言位操作中需要注意有:
位操作只針對整型和字元型資料
在右移操作中:對無符號數和有符號中的正數補 0;符號數中的負數,取決於所使用的系統:補 0 的稱為「邏輯右移」,補 1 的稱為「算術右移」。
迴圈移位的概念:
迴圈移位就是把從左邊移出去的,補到右邊去,或者從右邊移出去的補到左邊去,例如1000 0001迴圈右移以為得到:1100 0000,迴圈左移一位得到0000 0011
掩碼的概念:
掩碼就是掩蓋住你不想讓它出現的部分,例如在網路中的子網掩碼,就是將網路中的子網內部ip劃分遮蔽掉,例如需要判斷兩個ip是不是同乙個網段的,就把它們分別和本網斷的子網掩碼換算成二進位制,按位相與,得到要是同乙個值就證明兩個是同乙個網段的。
生成掩碼的三種方式和整數轉化成二進位制:
1 #include 2#pragma warning (disable:4996)34
void itobs(int
var);
5void mask1(int *mask);
6void mask2(int *mask);
7void mask3(int *mask);89
int main(void)10
20void mask1(int *mask)
2128
void mask2(int *mask)
2934 itobs(*mask);
35 printf("\n"
);36}37
void mask3(int *mask)
3843 itobs(*mask);
44 printf("\n"
);45}46
//利用位運算將整數轉化為二進位制表示
47void itobs(int
var)
4861 }
迴圈移位操作:
1 #include 2void circlemove(int *pdata, int
n);3
void itobs(int
var);
4int main(void)5
17//
迴圈移位,當n>0的時候,當n<0的時候右移
18//
迴圈移位,就是把按理說移出去的那些補到另一頭
19void circlemove(int *pdata, int
n)20
35else
if(n<0)
39 *pdata=data;40}
41void itobs(int
var)
4252
53 }
利用位運算實現兩個數交換值,不引入第三方變數和判斷乙個數是不是2的冪,也可以直接簡單的使用加法,例如:
a=5,b=3; a=a+b; b=a-b; a=a-b;但是著用方法存在溢位的危險,所以使用下列方法比較好
1 #include 2void swap(int *a, int *b);
3void judgepower(int *num);
4int main(void)5
16//
用按位異或交換兩個數的值,值針對整型和字元型
17void swap(int *a, int *b)
1823
//判斷乙個數是不是2的冪
24void judgepower(int *num)
25
字元檔案的 單個字元金鑰異或加密、字串金鑰異或加密、迴圈移位加密:
1 #include 2 #include3#pragma warning(disable:4996)
4void encrpty(char *secret, char key);//
金鑰為單個字元時的異或加密方法
5void de_encrpty(char *secret, char key);//
金鑰為單個字元時的異或解密方法
6void encrptystr(char *secret, char *key);//
金鑰為字串時的異或加密方法
7void de_encrptystr(char *secret, char *key);//
金鑰為字串時的異或解密方法
8void encode(char *secret);//
對字串進行迴圈移位加密
9void decode(char *secret);//
對字串進行迴圈移位解密
10int main(void)11
;13 printf("
請輸入需要加密的字元:\n");
14gets(source);
15//
金鑰為單個字元時的異或加密方法
16 encrpty(source, 'o'
);17 printf("
\n金鑰為單個字元時加密後:\n%s\n
", source);
18//
金鑰為單個字元時解密
19 de_encrpty(source, 'o'
);20 printf("
\n金鑰為單個字元時解密後:\n%s\n
", source);
21//
金鑰為字串時加密,此處內建使用「love」字串加密
22 encrptystr(source, "
love");
23 printf("
\n金鑰為字串時加密後:\n%s\n
", source);
24//
金鑰為字串時解密
25 de_encrptystr(source, "
love");
26 printf("
\n金鑰為字串時解密後:\n%s\n
", source);
27//
進行迴圈移位加密後
28encode(source);
29 printf("
\n進行迴圈移位加密後:\n%s\n
", source);
30//
進行迴圈移位解密後
31decode(source);
32 printf("
\n進行迴圈移位解密後:\n%s\n
", source);
33return0;
34}35//
秘鑰是單個字元的加密方法
36void encrpty(char *secret, char
key)
3749}50
}51void de_encrpty(char *secret, char
key)
5261}62
}63//金鑰是乙個字串的加密方法
64void encrptystr(char *secret, char *key)
6574
else
79if (i%klen == 0)//
當金鑰串遍歷到頭時,就把訪問變數重置為0,從第一位重新開始
80 i = 0;81
}82}83
//金鑰是乙個字串的解密方法,原理同加密
84void de_encrptystr(char *secret, char *key)
8594
else
99if (i%klen == 0
)100 i = 0
;101
}102
}103
/*對字串進行迴圈移位加密,這個不需要秘鑰
104原理是對每乙個字元進行迴圈移位加密,例如字元的二進位制形式是1000 0001,
105則向右迴圈移位一位時的得到的結果是1100 0000
106*/
107void encode(char *secret)
108118
}119
//對字串進行迴圈移位加密,是加密的逆過程
120void decode(char *secret)
121130 }
C語言位操作
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...
c語言位操作
位運算 and與 有一位為0 運算就為0 想獲取高四位,a a 0xf0 簡寫 a 0xf0 清零 一三五七位清零 a a 0x55 檢測位 檢測第三位 a a 0x04 遮蔽高四位,保留低4 位 a a 0x0f 統計2進製a中1的個數 1 include2 int main 3 11 print...
C語言位操作
朱老師物聯網大講堂 學習筆記 1 位與 只有1 1才是1,其餘全是0,位或 只有0 0才是0,其餘全是1,位取反 按位操作,位異或 1 0 1 0 1 1,也就是說相異結果是1,與1異或會取反,與0異或無變化,移位分 左 右 移,物件分 有 無符號數,只說一點 有符號數右移左側補符號位,叫算術移位,...