运算符的运用

这篇博客详细介绍了Java中的各种运算符,包括算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符以及条件运算符。通过示例代码展示了它们的使用方法,如加减乘除、赋值、比较、逻辑判断等,并提到了类型转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java语言支持以下运算符

  • 算术运算符 +, -, *, /,(前面的运算符在Java里面叫做模运算)%(余数) , ++, --

  • 赋值运算符 = (比如int a = 10; 把后面这个值赋值给a)

  • 关系运算符 >, <, >=, <=, == (Java里面等于是用两个等于号等于的) . !=instanceof (不等于在Java中是!=)

  • 逻辑运算符 &&(与),II(或), !(非)

  • 位运算符 &,I, ^, ~. >> , << , >>>(了解他们就可以了!!!)

  • *条件运算符 ? : *

  • 扩展赋值运算符 += , -= , *= , /=

记住一个单词cast=转换

加减乘除

 package operator;//代表当前的包不能删除
​
public class Day01 {
    public static void main(String[] args) {
        //二元运算符  就是  a+b
        //快捷键 Ctrl =d 就是复制当前行到下一行
        int a=10;
        int b=20;
        int c=25;
        int d=25;
        System.out.println(a+b);//(+等于加)
        System.out.println(a-b);//(-等于减)
        System.out.println(a*b);//(*等于乘)
        System.out.println(a/b);//(/等于除以)他的值等于0.5但是用int算出来的值等于0需要进行强制转换(a/(doubie)b);强制转换以后他的值等于0.5
​
    }
​
}

long类型和int类型加减

public class Day02{
    public static void main(String[] args) {
        long a = 123123123123123L;//long类型后面加大写L
        int b = 123;
        short c = 10;
        byte d = 8;
        System.out.println(a + b + c);//long类型如果多个操数中有一个数为long类型那么它的结果就为long类型
        System.out.println(b + c + d);//int类型如果没有long类型那么他的结果都为int类型
        System.out.println(c + d);//int类型如果没有long类型那么他的结果都为in
        //System.out.println((double)c+d);等于double小数结果如果是是整数他的结果后面+.0小数结果
        //cast=转换记住这个单词

    }

}

布尔值类型

package operator;
public class Day03 {
    public static void main(String[] args) {
//关系运算符返回的结果=要么正确 要么错误在Java里面正确和错误用布尔值(boolean)来表示的false(错误)---true(正确)//关系运算符就是来判断这个结果的正确和错误的
        int a = 10;
        int b = 20;
        int c = 21;
        System.out.println(c % a);//%(c%a);等于除以的意思就是21除以10=2余111%的作用就是取余数!也叫做模运算。
        System.out.println(a>b);//false错误 a=10 b=20
        System.out.println(a<b);//true正确a=10 b=20
        System.out.println(a==b);//false错误a=10 b=20 在Java里面=是==两个等于号!!
        System.out.println(a!=b);//true正确 a=10 b=20
​
    }
}

赋值运算符

/*++加加(意思叫自增 :就是自己增加) --减减(意思叫做自减 :就是自己减少) -- ++ 也叫做一元运算符 */ int a = 3; //a的初始值等于3 int b =a= a+1; // int b =a++; b =a是吧a的值转化给了b 然后或给a进行+1 // int b =a; a=a+1; 这个a++执行完后会先给b赋值,然后再自增 这个a++执行完的下一句才会被+1 //a =a+1;相当于在后面隐藏了这样一句话是在后面执行的 //相当于在int b =a++;中间隐藏了代码a++=a; a=a+1; (a++=a; 就b=a++;)没有被执行执行以后才会实行增或减 //System.out.println(a);//在这个地方输出的值等于4 //在b和c的中间加了一个a++=a; =a+1; int c = ++a; //执行完这行代码前,先给a自增在赋值 //++a a=a+1; //在这个地方c输出的是5相当于在b=a++;与c=++a;的中间加了一个++a a=a+1; System.out.println(a);//在这个地方输出的值等于5 System.out.println(b); System.out.println(c);

        //a++ 与 a--是一样的

逻辑运算符

  • $$.II,!

    逻辑运算符
    public class Day05
    {
        public static void main(String[] args) {
            //里面有3种操作(与 and)&&(或  or)||(非  取反)!
            boolean a =true;
            boolean b =false;
            System.out.println("a && b: "+(a&&b));//逻辑与运输算;两个变量都为真结果,结果才会为true
            System.out.println("a && b: "+(a||b));//逻辑或运输算;两个变量有一个为真(true),则结果才会为true
            System.out.println("!(a %% b)"+!(a&&b));//如果是真则变为假(false),如说是假则变为真(true)
           //短路运算的情况下 假设a(true)是真,b是(false)假 把b放在前面a放在后面会直接认为这个是假(false)不会执行后面的
           int c =5;
           boolean d = (c<4)&&(c++<10);
           //结果false假  短路运算
            System.out.println(d);
            System.out.println(c);
        }
    }

    位运算

    ​
    public class Day06
    {
        public static void main(String[] args) {
            /*
            a= 0011 1100
            b= 0000 1101
    ----------------------------------------------------------
          a&b= 0000 1100     如果对应位为1他才为1否则就是0
          a|b= 0000 1101     如果对应位为0结果为0否则就是1
          a~b= 0011 0001     如果对应位相同则为0 否则就是1
           ~b= 1111 0010     取反跟上面的(b= 0000 1101)完全相反
    ​
           2*8=16 怎么最快运算出来   拆分为2*2*2*2
           <<(小于小于) :左移相当于把数字乘2(*2)
           >>(大于大于)  :右移相当于把数字除以2(|2)
           位运算效率高跟二进制打交道的
           0000 0000   在二进制里面8个0代表0
           0000 0001   代表1
           0000 0010   代表2
           0000 0011   代表3
           0000 0100   代表4
           0000 1000   代表8
           0001 0000   代表16
             */
            System.out.println(2<<3);//=16
        }
    }
<think>我们正在讨论Verilog中的条件运算符(三元运算符)。根据引用[1],条件运算符(?:)的优先级高于赋值运算符,但低于大多数其他运算符。因此,在使用时需要注意运算符优先级,必要时使用括号来确保运算顺序。引用[2]中提到了Verilog中的一些运算符,但没有直接提到条件运算符。但我们可以结合基本知识来回答。条件运算符的格式:condition?expression1:expression2当condition为真(非0)时,选择expression1;否则选择expression2。使用技巧:1.嵌套条件运算符:可以嵌套使用,但要注意可读性,避免过度嵌套。2.优先级:条件运算符的优先级较低,当与其他运算符一起使用时,通常需要用括号来明确运算顺序。3.组合逻辑:条件运算符常用于组合逻辑中,可以替代简单的if-else结构,使代码简洁。4.可综合:条件运算符是可综合的,综合结果通常是一个多路选择器。下面给出几个示例:示例1:基本使用wire[3:0]a,b,c;assignc=(a>b)?a:b;//比较a和b,将较大者赋值给c示例2:嵌套使用(比较三个数中的最大值)wire[3:0]a,b,c,max;assignmax=(a>b)?((a>c)?a:c):((b>c)?b:c);示例3:用于多路选择wire[1:0]sel;wire[3:0]d0,d1,d2,d3,out;assignout=(sel==2'b00)?d0:(sel==2'b01)?d1:(sel==2'b10)?d2:d3;注意事项:条件运算符的每个分支的表达式类型和位宽应该一致,否则会按照Verilog的规则进行自动转换,可能导致意料之外的结果。根据以上内容,我们生成相关问题:1.在Verilog中,如何避免条件运算符的嵌套导致的代码可读性下降?2.条件运算符是否可以用于时序逻辑(如在always块中)?如果可以,有什么注意事项?3.在条件运算符中,如果两个分支的位宽不同,会如何处理?4.条件运算符的综合结果通常是什么?它与if-else语句的综合结果有何不同?</think> ### Verilog条件运算符的使用详解 在Verilog中,条件运算符(`?:`)是一种三元运算符,语法为: **`condition ? true_expression : false_expression`** 其优先级高于赋值运算符但低于逻辑运算符,需特别注意表达式嵌套时的括号使用[^1]。 --- ### 基础用法与技巧 1. **简单赋值** ```verilog // 选择较大值 wire [7:0] max = (a > b) ? a : b; ``` 2. **多级选择**(避免过度嵌套) ```verilog // 推荐写法:阶梯式条件 wire [3:0] result = (sel == 2'b00) ? d0 : (sel == 2'b01) ? d1 : (sel == 2'b10) ? d2 : d3; ``` 3. **组合逻辑实现** ```verilog // MUX实现:选择4输入中的1个 assign out = enable ? (sel[1] ? (sel[0] ? d3 : d2) : (sel[0] ? d1 : d0)) : 8'bz; ``` --- ### 关键注意事项 1. **括号必要性** 当与其他运算符混用时必须加括号: ```verilog // 错误:优先级混淆 wire y = a & b ? c : d; // 正确: wire y = (a & b) ? c : d; ``` 2. **类型匹配** 分支表达式位宽需一致,否则自动补零: ```verilog wire [7:0] val = cond ? 8'd100 : 4'd10; // 4'd10被扩展为8'b00001010 ``` 3. **可综合性规则** - 条件表达式必须是**常量**或**可综合的组合逻辑** - 避免在条件中引入锁存器(如未覆盖所有分支) --- ### 与if-else对比 | **场景** | 条件运算符 | if-else | |-------------------|---------------------------|----------------------| | 简单二选一 | ✅ 更简洁 | ⚠️ 需always块 | | 时序逻辑 | ❌ 不可用 | ✅ 必须使用 | | 嵌套多分支 | ⚠️ 可读性差(超过2层) | ✅ 结构清晰 | | 组合逻辑选择器 | ✅ 直接assign实现 | ⚠️ 需完整case/default| > 关键技巧:**简单选择用条件运算符,复杂分支用`case`或`if-else`**[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值