検索

ホームページ  >  に質問  >  本文

c++ - 如何不使用第三个变量,交换两个char的值

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

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

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

PHP中文网PHP中文网2805日前634

全員に返信(7)返信します

  • 大家讲道理

    大家讲道理2017-04-17 14:46:40

    一般

    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
  • 阿神

    阿神2017-04-17 14:46:40

    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
  • 怪我咯

    怪我咯2017-04-17 14:46:40

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

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:46:40

    void function(char &a, char &b){
      if(a==b) を返す;
      a = a ^ b;
      b = b ^ a;
      a = a ^ b;
    }

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 14:46:40

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

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

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:46:40

    Char も本質的には整数です

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:46:40

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

    返事
    0
  • キャンセル返事