给定两个 int 变量,交换变量的值。Java 实现

交换两个变量的值,我们首先能分成两种做法。第一种是创建一个临时变量来保存其中一个变量的值,从而进行交换;第二种是不创建临时变量使用加减方法和异或的方法实现两个值的交换。
创建临时变量是我们能直接想到最简单的方法;如果不允许创建临时变量我们也能想到用加减法来实现,并且不会产生值溢出的情况。但是异或的方法前提是我们对位运算非常了解他们的特性,这个比较难想到。
具体代码实现如下:

public class Java {
    public static void main(String[] args) {
        int a = 40;
        int b = 20;
        // 方法一(创建临时变量):
        int num = 0;
        num = a;
        a = b;
        b = num;
        // 方法二(不创建临时变量,使用加减方法):
        b = a - b;
        a = a - b;
        b = a + b;
        // 方法三(不创建临时变量,使用异或方法):
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println(a);
        System.out.println(b);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flex和Bison是两个独立的工具,通常一起使用来开发编译器。Flex是一个词法分析器生成器,它将输入文本流转换为标记流。Bison是一个语法分析器生成器,它将标记流转换为语法树。 在Flex中,我们可以使用YYSTYPE定义标记类型。YYSTYPE是一个联合体,它可以存储不同类型的,例如整数、浮点数、字符串等等。例如,以下代码段定义了一个存储整数的YYSTYPE: ``` %{ #include "y.tab.h" %} %union { int val; } %token <val> INTEGER ``` 在这个例子中,我们定义了一个union类型的YYSTYPE,它只有一个成员变量val,这个变量存储整数。我们还定义了一个标记INTEGER,它使用了<val>属性来存储整数。 在Bison中,我们可以使用$1、$2等符号来访问先前定义的YYSTYPE。例如,以下代码段展示了如何将两个整数相加: ``` %{ #include <stdio.h> %} %union { int val; } %token <val> INTEGER %left '+' '-' %% stmt: expr { printf("%d\n", $1.val); } expr: INTEGER { $$ = $1; } | expr '+' expr { $$ = $1.val + $3.val; } | expr '-' expr { $$ = $1.val - $3.val; } ; %% int main() { yyparse(); return 0; } ``` 在这个例子中,我们定义了一个语法规则expr,它可以是一个整数或者是两个表达式相加或相减。当两个表达式相加或相减时,我们可以使用$1和$3来访问先前定义的YYSTYPE,并将它们相加或相减。最终的结果存储在$$中,这是Bison特殊定义的符号。 这就是Flex和Bison的交互方式的一个简单例子。当我们在编写复杂的编译器时,我们可以使用这些工具来定义不同的YYSTYPE和语法规则,以便将文本流转换为可执行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值