对于int a 和 int b 可以使用下面的代码 互换a和b的值
void function(inta, int b){ a=a+b; b=a-b; a=a-b; }
如果交换 两个char类型,该怎么办喃?
认证0级讲师
char 型は実際には 1 バイトのみのバイト型であるため、オーバーフローの問題を考慮する必要があり、加算は使用できません。 もちろん、実際には、bit XOR を使用するのが一般的な方法であり、int 型は加算と減算によって交換できません。
bit XOR
void main() { 文字 a = 'x'; char b = 'y'; a ^ = b; b ^= b; a ^ = b; std::cout << "a:"
Windows プラットフォームを使用している場合は、組み込み関数を使用できます
void main() { 文字 a = 'x'; char b = 'y'; b=InterlockedExchange8(&a, b); std::cout <<"a:"
アセンブリを使用して自分で直接行うことができます
void main() { 文字 a = 'x'; char b = 'y'; __asm { ムーブアル、a xchg al,b ムーブ・ア・アル } std::cout << "a:"
char は実際には int です。
char
int
#include void swap(char *a, char *b) { *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; } int main() { 文字 a = 'x'; char b = 'y'; printf("交換前: a='%c', b='%c'.\n", a, b); スワップ(&a, &b); printf("交換後: a='%c', b='%c'.\n", a, b); 0を返します。 }
出力
交換前: a='x'、b='y'。 交換後: a='y', b='x'.
覚えておいてください。ビット演算が使用されています。詳細は忘れました。
それにマークを付けて、マスターが答えるまで待ちます
void function(char &a, char &b){ if(a==b) を返す; a = a ^ b; b = b ^ a; a = a ^ b; }
実際、2 つの整数 (char を含む) の場合、XOR を使用して変数を交換する方が、加算と減算を使用するよりも優れています (オーバーフローの問題はありません)
XOR を使用しても効率やスペースの節約は向上しません。また、2 つの char が等しい場合、結果は間違っています。例:
char a = 'f'; char b = 'f'; char a = b ^ a // 現在は a == 0
アセンブリに関しては、余分なスペースはありません。変数の交換に XOR を使用するのが間違っている理由を参照してください。
Char も本質的には整数です
型変換が必要ですしたがって、char型データを変換するときは int型の中間の3番目の変数を参照する必要があります したがって、あなたの質問は矛盾しています。達成できません。
一般
char 型は実際には 1 バイトのみのバイト型であるため、オーバーフローの問題を考慮する必要があり、加算は使用できません。
もちろん、実際には、
bit XOR
を使用するのが一般的な方法であり、int 型は加算と減算によって交換できません。スペシャル
Windows プラットフォームを使用している場合は、組み込み関数を使用できます
延長
アセンブリを使用して自分で直接行うことができます
char
は実際にはint
です。出力
覚えておいてください。ビット演算が使用されています。詳細は忘れました。
それにマークを付けて、マスターが答えるまで待ちます
実際、2 つの整数 (char を含む) の場合、XOR を使用して変数を交換する方が、加算と減算を使用するよりも優れています (オーバーフローの問題はありません)
XOR を使用しても効率やスペースの節約は向上しません。また、2 つの
char
が等しい場合、結果は間違っています。例:アセンブリに関しては、余分なスペースはありません。変数の交換に XOR を使用するのが間違っている理由を参照してください。
Char も本質的には整数です
型変換が必要です
したがって、char型データを変換するときは
int型の中間の3番目の変数を参照する必要があります
したがって、あなたの質問は矛盾しています。達成できません。