c语言之异或运算
c語(yǔ)言之異或運(yùn)算
異或運(yùn)算,計(jì)算機(jī)相關(guān)專業(yè)比較熟悉了。相同為0,不同為1.結(jié)合計(jì)算機(jī)內(nèi)部的位運(yùn)算,a^a=0;與本身異或是為0的。有關(guān)的知識(shí)運(yùn)用到數(shù)據(jù)交換中去。
void int_swap(int *x,int *y){*y=*x^*y;//step1*x=*x^*y;//step2*y=*x^*y;//step3 }運(yùn)用這個(gè)函數(shù)就能完成兩個(gè)數(shù)據(jù)交換。但是并沒有提高時(shí)間復(fù)雜度和空間復(fù)雜度,有關(guān)書籍上稱之為智力游戲。我們來(lái)看看數(shù)據(jù)的變化。
假設(shè)*x=a,*y=b.
| step1 | a | a^b |
| step2 | a^a^b=b | a^b |
| step3 | b | b^a^b=a |
可在DEV上運(yùn)行的完整代碼,供大家學(xué)習(xí)。
#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; }很簡(jiǎn)單就沒有注釋,關(guān)鍵是我太懶,還有就是好久不寫代碼了!太菜太菜。
這里給大家一個(gè)網(wǎng)站吧,c網(wǎng)頁(yè)編譯器
我不想保存的,或者調(diào)試的喜歡用網(wǎng)頁(yè)運(yùn)行一下。專業(yè)課太多和自己貪玩c快荒廢了。最近在啃一本書《計(jì)算機(jī)體系結(jié)構(gòu)》其實(shí)也沒有多少時(shí)間,最近忙著做其他的項(xiàng)目,但是力不從心。
下面給大家一個(gè)數(shù)組交換的代碼。不多說(shuō)了,精力有限。
#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; }大家可以自己輸入數(shù)組的數(shù)據(jù),或者用自己喜歡的方式都o(jì)k的!
我的結(jié)果是這樣的。
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
到此就結(jié)束了。
總結(jié)
- 上一篇: 什么是IDC?IDC基础知识
- 下一篇: Firefly的Gevent重要迭代版本