Home  >  Q&A  >  body text

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

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

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

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


高洛峰高洛峰2874 days ago674

reply all(2)I'll reply

  • 代言

    代言2016-11-09 15:36:46

    char其实就是int呀

    #include 
    
    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'.


    reply
    0
  • 三叔

    三叔2016-11-09 15:36:14

    一般的

    char型实际上是byte型,只有一个字节,因此必须考虑溢出的问题,不能用加法。
    当然,实质上int型也不能用加减法这样来交换,用位异或是个通用的办法。

    void main()
    {
        char a = 'x';
        char b = 'y';
        a ^= b;
        b ^= b;
        a ^= b;
        std::cout << "a:"<< a <<"-b:" << b<

    特殊的

    如果你在windows平台下的话,可以使用内置函数

    void main()
    {
        char a = 'x';
        char b = 'y';
        b=InterlockedExchange8(&a, b);
        std::cout << "a:"<< a <<"-b:" << b<

    延伸的

    你可以使用汇编来直接自行完成

    void main()
    {
        char a = 'x';
        char b = 'y';
        __asm
        {
            mov al,a
            xchg al,b
            mov a,al
        }
        std::cout << "a:"<< a <<"-b:" << b<


    reply
    0
  • Cancelreply