c++ - 如何不使用第三个变量,交换两个char的值
PHP中文网
PHP中文网 2017-04-17 14:44:40
0
7
628

对于int a 和 int b
可以使用下面的代码 互换a和b的值

void function(inta, int
b){
        a=a+b;
        b=a-b;
        a=a-b;
    }

如果交换 两个char类型,该怎么办喃?

PHP中文网
PHP中文网

认证0级讲师

全員に返信(7)
大家讲道理

一般

char 型は実際には 1 バイトのみのバイト型であるため、オーバーフローの問題を考慮する必要があり、加算は使用できません。
もちろん、実際には、bit XOR を使用するのが一般的な方法であり、int 型は加算と減算によって交換できません。

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:"
いいねを押す +0
阿神

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'.
いいねを押す +0
刘奇

覚えておいてください。ビット演算が使用されています。詳細は忘れました。

それにマークを付けて、マスターが答えるまで待ちます

いいねを押す +0
伊谢尔伦
void function(char &a, char &b){
  if(a==b) を返す;
  a = a ^ b;
  b = b ^ a;
  a = a ^ b;
}

実際、2 つの整数 (char を含む) の場合、XOR を使用して変数を交換する方が、加算と減算を使用するよりも優れています (オーバーフローの問題はありません)

いいねを押す +0
Ty80

XOR を使用しても効率やスペースの節約は向上しません。また、2 つの char が等しい場合、結果は間違っています。例:

char a = 'f';
char b = 'f';
char a = b ^ a // 現在は a == 0

アセンブリに関しては、余分なスペースはありません。変数の交換に XOR を使用するのが間違っている理由を参照してください。

いいねを押す +0
伊谢尔伦

Char も本質的には整数です

いいねを押す +0
伊谢尔伦

型変換が必要です
したがって、char型データを変換するときは
int型の中間の3番目の変数を参照する必要があります
したがって、あなたの質問は矛盾しています。達成できません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート