C語言 位操作

2022-09-11 22:21:28 字數 4101 閱讀 3305

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 2

void 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 2

void 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 #include 

3#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異或無變化,移位分 左 右 移,物件分 有 無符號數,只說一點 有符號數右移左側補符號位,叫算術移位,...