84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
对于int a 和 int b 可以使用下面的代码 互换a和b的值
void function(inta, int b){ a=a+b; b=a-b; a=a-b; }
如果交换 两个char类型,该怎么办喃?
认证0级讲师
char型实际上是byte型,只有一个字节,因此必须考虑溢出的问题,不能用加法。当然,实质上int型也不能用加减法这样来交换,用位异或是个通用的办法。
位异或
void main() { char a = 'x'; char b = 'y'; a ^= b; b ^= b; a ^= b; std::cout << "a:"<< a <<"-b:" << b<<std::endl; //a:y-b:x }
如果你在windows平台下的话,可以使用内置函数
void main() { char a = 'x'; char b = 'y'; b=InterlockedExchange8(&a, b); std::cout << "a:"<< a <<"-b:" << b<<std::endl; //a:y-b:x }
你可以使用汇编来直接自行完成
void main() { char a = 'x'; char b = 'y'; __asm { mov al,a xchg al,b mov a,al } std::cout << "a:"<< a <<"-b:" << b<<std::endl; //a:y-b:x }
char其实就是int呀
char
int
#include <stdio.h> void swap(char *a, char *b) { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; } int main() { char a = 'x'; char b = 'y'; printf("交换前: a='%c', b='%c'.\n", a, b); swap(&a, &b); printf("交换后: a='%c', b='%c'.\n", a, b); return 0; }
输出
交换前: a='x', b='y'. 交换后: a='y', b='x'.
记得 是用位运算 具体忘记
标记一下 还是等大神来解答吧
void function(char &a, char &b){ if(a==b) return ; a = a ^ b; b = b ^ a; a = a ^ b; }
其实对于2整型(包括char),用异或交换变量比用加减好(不存在溢出问题)
使用异或并不能提高效率/节省空间,并且当两个char相等时结果是错误的。例如:
char a = 'f'; char b = 'f'; char a = b ^ a // now a == 0
并且走到汇编时,并不能额外的空间,可参考 为什么用异或来交换变量是错误的
char 本质也是整型
需要类型转换所以在对char类型的数据进行转换的时候必须要引用一个中间的int类型第三个变量所以你问的问题自相矛盾。不能实现。
一般的
char型实际上是byte型,只有一个字节,因此必须考虑溢出的问题,不能用加法。
当然,实质上int型也不能用加减法这样来交换,用
位异或
是个通用的办法。特殊的
如果你在windows平台下的话,可以使用内置函数
延伸的
你可以使用汇编来直接自行完成
char
其实就是int
呀输出
记得 是用位运算 具体忘记
标记一下 还是等大神来解答吧
其实对于2整型(包括char),用异或交换变量比用加减好(不存在溢出问题)
使用异或并不能提高效率/节省空间,并且当两个
char
相等时结果是错误的。例如:并且走到汇编时,并不能额外的空间,可参考 为什么用异或来交换变量是错误的
char 本质也是整型
需要类型转换
所以在对char类型的数据进行转换的时候
必须要引用一个中间的int类型第三个变量
所以你问的问题自相矛盾。不能实现。