大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
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.
*x | *y | |
---|---|---|
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
到此就结束了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/231293.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...