c语言之异或运算
c語言之異或運算
異或運算,計算機相關專業比較熟悉了。相同為0,不同為1.結合計算機內部的位運算,a^a=0;與本身異或是為0的。有關的知識運用到數據交換中去。
void int_swap(int *x,int *y){*y=*x^*y;//step1*x=*x^*y;//step2*y=*x^*y;//step3 }運用這個函數就能完成兩個數據交換。但是并沒有提高時間復雜度和空間復雜度,有關書籍上稱之為智力游戲。我們來看看數據的變化。
假設*x=a,*y=b.
| step1 | a | a^b |
| step2 | a^a^b=b | a^b |
| step3 | b | b^a^b=a |
可在DEV上運行的完整代碼,供大家學習。
#include<stdio.h> void int_swap(int *x,int *y){*y=*x^*y;*x=*x^*y;*y=*x^*y; } int main(){int *x;int *y;int i=10;int j=20;x=&i;y=&j;printf("first x= %d\ny= %d\n",*x,*y);int_swap(x,y);printf("second x= %d\ny= %d\n",*x,*y);return 0; }很簡單就沒有注釋,關鍵是我太懶,還有就是好久不寫代碼了!太菜太菜。
這里給大家一個網站吧,c網頁編譯器
我不想保存的,或者調試的喜歡用網頁運行一下。專業課太多和自己貪玩c快荒廢了。最近在啃一本書《計算機體系結構》其實也沒有多少時間,最近忙著做其他的項目,但是力不從心。
下面給大家一個數組交換的代碼。不多說了,精力有限。
#include<stdio.h> void int_swap(int *x,int *y){*y=*x^*y;*x=*x^*y;*y=*x^*y; } void reverse_array(int a[],int cnt){int first,last;for(first=0,last=cnt-1;first<last;first++,last--) int_swap(&a[first],&a[last]);printf("first=%d,last=%d\n",first,last);for(int i=0;i<21;i++) printf("%d\n",a[i]); } int main(){int *x;int *y;//int i=10;//int j=20;//x=&i;//y=&j;int a[21];for(int i=1;i<22;i++){a[i-1]=i;}reverse_array(a,21);//printf("first x= %d\ny= %d\n",*x,*y);//int_swap(x,y);//printf("second x= %d\ny= %d\n",*x,*y);return 0; }大家可以自己輸入數組的數據,或者用自己喜歡的方式都ok的!
我的結果是這樣的。
first=10,last=10
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
Process exited after 0.114 seconds with return value 0
到此就結束了。
總結
- 上一篇: 什么是IDC?IDC基础知识
- 下一篇: Firefly的Gevent重要迭代版本