首页 > 其他分享 >Day09——运算符

Day09——运算符

时间:2024-10-06 10:22:28浏览次数:1  
标签:Day09 int System 运算符 类型 println out

基本运算符

运算符

Java 语言支持如下运算符: (重点掌握前4个)

算术运算符:+、-、*、/、%、++; --

赋值运算符: =

关系运算符:>、<、>=、<=、==、!=、instanceof(稍后再讲)

逻辑运算符:&&、||、!

位运算符:&、|、^、~、>>、<<、>>>;(了解)

条件运算符: ? :

扩展赋值运算符:+=、-=、*=、/=。

详细解释:

/ 除法

% 取余 左操作数除以右操作数的余数

= 赋值运算符,将右操作数的值赋给左侧操作数,C = A + B将把A + B得到的值赋给C

== 判断如果两个操作数的值是否相等,如果相等则条件为真。

!= 判断如果两个操作数的值是否不相等,如果值不相等则条件为真。

按位与(&) :对两个整数的二进制表示的每一位进行与运算。只有当两个相应位都为 1 时,结果位才为 1,否则为 0。 例如:5(二进制为 0101)& 3(二进制为 0011),结果为 0001,即 1。

按位或(|):对两个整数的二进制表示的每一位进行或运算。只要两个相应位中有一个为 1,结果位就为 1。 例如:5(二进制为 0101)| 3(二进制为 0011),结果为 0111,即 7。

按位异或(^):对两个整数的二进制表示的每一位进行异或运算。当两个相应位不同时,结果位为 1相同时为 0。 例如:5(二进制为 0101)^ 3(二进制为 0011),结果为 0110,即 6。

按位取反(~):对一个整数的二进制表示的每一位进行取反操作。0 变为 1,1 变为 0。 例如:~5(二进制为 0101),结果为 1010,由于计算机中以补码形式存储,所以结果为 -6。

左移(<<):将一个整数的二进制表示向左移动指定的位数。左移一位相当于乘以 2。 例如:5(二进制为 0101)<< 1,结果为 1010,即 10。

右移(>>) :将一个整数的二进制表示向右移动指定的位数。正数右移一位相当于除以 2,负数右移时,高位补符号位。 例如:5(二进制为 0101)>> 1,结果为 0010,即 2。

无符号右移(>>>): 无论操作数是正数还是负数,无符号右移都用 0 填充高位。 例如:-5(二进制为 11111111111111111111111111111011)>>> 1,结果为 01111111111111111111111111111101,即 2147483645。

逻辑运算符:判断与 或 非的关系 and or

//二元运算符   两个数的运算
        //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((double)a/b);  //在计算时,要小心结果小数部分四舍五入的问题。可以把一个数转换类型

不同整数类型计算,结果类型

 //不同整数类型相加,结果的类型研究
        long a=123123123123123l;
        int b=123123123;
        short c=17;
        byte d=1;
        System.out.println(a+b+c+d);//long类型
        System.out.println(b+c+d);  //int类型
        System.out.println(c+d);    //int类型 
        //在这段代码中,c是short类型,d是byte类型。当进行c + d运算时,Java 中会将byte和short类型自动提升为int类型进行计算。
        /*
        总结:
        不同整数类型相加,有long类型参与,结果为long类型;
                       没有long类型参与,结果为int类型
                       当byte和short类型进行计算时,byte和short类型自动提升为int类型进行计算。
         */

        

总结:

不同整数类型相加,有long类型参与,结果为long类型;
没有long类型参与,结果为int类型
当byte和short类型进行计算时,byte和short类型自动提升为int类型进行计算。

不同整数类型的范围

在 Java 中,byteshortintlong都是整数类型,它们的取值范围如下:

  1. byte: - 占用 1 个字节(8 位)。 - 取值范围是 -128 到 127。这是因为使用二进制补码表示法,最高位为符号位,0 表示正数,1 表示负数。具体范围计算为 -2 的 7 次方到 2 的 7 次方减 1,即 -128 到 127。

  2. short: - 占用 2 个字节(16 位)。 - 取值范围是 -32768 到 32767。同样采用二进制补码表示法,范围为 -2 的 15 次方到 2 的 15 次方减 1。

    3.int: - 占用 4 个字节(32 位)。 - 取值范围是 -21_4748_3648 到 21_4748_3647。范围为 -2 的 31 次方到 2 的 31 次方减 1。

    4.long: - 占用 8 个字节(64 位)。 - 取值范围是 -922_3372_0368_5477_5808 到 9223372036854775807。范围为 -2 的 63 次方到 2 的 63 次方减 1。

不同浮点数类型相加,结果的类型研究

//不同浮点数类型之间的计算
        float i1=1.5f;
        double i2=3.0;
        System.out.println(i1/i2);   //double类型
        //总结: float和double之间计算,结果为double

总结:

float和double之间计算,结果为double

float和double存储大小和精度

  1. 存储大小
    • float占用 4 个字节(32 位)。
    • double占用 8 个字节(64 位)。
  2. 精度
    • double的精度比 float高得多。具体来说,float可以提供大约 6 - 7 位有效数字,而 double可以提供大约 15 - 16 位有效数字。

整数与浮点数之间的计算

//整数与浮点数之间的计算
        System.out.println(a+i2);//1.231231231231237E15  double类型
        System.out.println(b+i1);//1.2345679E8           float类型
        
        /*
        在这段代码中,int类型的b与float类型的i1进行计算。
        计算结果为:123456789 + 1.5f等于123456790.5。
        结果类型是float类型经过自动类型提升后的float类型
        (因为int和float运算时,int会自动提升为float)。
        但是如果直接打印,由于System.out.println在打印float和double类型时,会将其转换为String类型输出,可能会以小数形式输出结果。
         */
         
         
        //为了输出b+i1的准确结果,在已知结果是float类型时,可以使用System.out.printf进行格式化输出,可以控制输出的小数位数,这里设置输出结果保留两位小数。这样可以更准确地查看结果。
        float result = b + i1;
        System.out.printf("b + i1 的结果为:%.2f%n", result);

总结:
1.整数与浮点数计算,结果的类型和浮点数的类型保持一致。浮点数类型为float,结果为float;浮点数类型为double,结果为double;

2.在Java中,当你看到一个数值以科学计数法的形式表示,如 1.231231231231237E15,这通常意味着该数值是一个double类型的浮点数.浮点数的小数部分通常无法精确表达,也就无法准确知道小数点后有多少位。也可以说,因为这个数后面没有带f,因为这个数小数点后有效数字超过7位,所以不是float类型

  1. System.out.println在打印float和double类型时,会将其转换为String类型输出,可能会以小数形式输出结果。

关系运算符

 //关系运算符返回的结果:正确、错误    布尔值
        int i1=10;
        int i2=12;
        System.out.println(i1==i2);//false
        System.out.println(i1!=i2);//true
        System.out.println(i1<i2);//true
        System.out.println(i1>i2);//false
        System.out.println(i1<=i2);//true
        System.out.println(i1>=i2);//false
        System.out.println(i2%i1);  //2

自增自减运算符

//++  --   自增 自减   一元运算符  难点!!!!!!!!!!!!!!
        int a=3;
        int b=a++;            //a++  a先赋值给b,然后a自增  a=a+1
                             //a=4;b=3

        int c=++a;            //++a   a先自增,再给b赋值
        System.out.println(c);//c=5
        System.out.println(a);//a=5
        /*
        System.out.println(a);//5
        System.out.println(a);
        System.out.println(b);//3
        System.out.println(b);
        System.out.println(c);//5
        System.out.println(c);
        */

        //一定要上手算一遍,才知道a++和++a的区别!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

要点:

a++ a先赋值给b,然后a自增

++a a先自增,再给b赋值

幂的计算

//拓展——幂的计算
        System.out.println(Math.pow(2,3));//8.0
        //Math.pow()方法返回数据是double类型

总结:

Math.pow()方法返回数据默认是double类型

逻辑运算符

//逻辑运算符
        //与(and)   或(or)    非(取反)
        boolean a=true;
        boolean b=false;
        System.out.println("a&&b:"+(a&&b));  //false  逻辑与运算:两个结果都为真,结果才为真
        System.out.println("a||b:"+(a||b));  //true   逻辑或运算:有一个结果为真,结果为真
        System.out.println("!a&&b:"+!(a&&b));//true   逻辑非运算:如果是真,则为假
        System.out.println("==============================");
        //短路运算:
        // 当a&&b,a为false时,程序会不会检查b的情况?
        int c=5;
        boolean d=(c>6)&&(c++<1);
        System.out.println(d);//false
        System.out.println(c);//5  (c++<1)没有被程序所运算
        //总结:当a&&b,a为false时,程序不会检查b的情况而直接输出false

总结:

&& 与运算:两个结果都为真,结果才为真

|| 或运算:有一个结果为真,结果为真

! 非运算:如果是真,则为假

位运算符

//位运算符          位运算效率高
        /*
        A=0011 1100
        B=0000 1101
-------------------------------------------------------------
      A&B 0000 1100       & 与  两位相同为0,不同为1
      A|B 0011 1101       | 或  两位有1个1,就为1
      A^B 0011 0001       ^ 异或  两位不同为1,相同为0
      ~b  1111 0010       ~ 相反  1变0;0变1
      <<   左移   相当于乘二
      >>   右移   /2
-------------------------------------------------------------

         */
        //利用位运算符快速计算2*8     2*2*2*2
        System.out.println(2<<3);
        /*
        0000 0000          0
        0000 0001          1
        0000 0010          2
        0000 0011          3
        0000 0100          4
        0000 1000          8
        0001 0000          16         每乘一个2,二进制的1就左移1位
         */

注意:

& 与 对应的两个二进位均为1时,结果位才为1 ,否则为0。

| 或 两位有1个1,就为1

^ 异或 两位不同为1,相同为0
相反 1变0;0变1

<< 左移 相当于乘二

扩展赋值运算符

//扩展赋值运算符   可偷懒

        /*int a=10;
        int b=20;
        //a+=b;   //a=a+b
        a-=b;   //a=a-b
        System.out.println(a); //-10
        System.out.println(b);  //20


        System.out.println(a+b); //10
        */

总结:

a+=b 相当于 a=a+b

a-=b 相当于 a=a-b

字符串连接符

//字符串连接符         +
        int i1=10;
        int i2=20;
        System.out.println(i1+i2);//30
        System.out.println(""+i1+i2);//1020    字符串在前面,后面的会进行拼接;
        System.out.println(i1+i2+"");//30       字符串在后面,前面的会进行运算
        //注意:""+i1+i2  和    i1+i2+""   含义不一样

注意:

""+i1+i2 和 i1+i2+"" 含义不一样

三元运算符

//三元运算符   ? :
        //x ? y : z
        //如果x==true,结果为y;否则结果为z
        int score=55;
        String result=score<60 ? "成绩不及格":"成绩及格";
        System.out.println(result);//成绩不及格

总结:

x ? y : z
如果x==true,结果为y;否则结果为z

标签:Day09,int,System,运算符,类型,println,out
From: https://www.cnblogs.com/xiaokunzhong/p/18448890

相关文章

  • ES6中扩展运算符...与Set结合使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • 实验一 C语言开发环境使用和数据类型,运算符,表达式
    #include<stdio.h>intmain(){printf("0\n");printf("<H>\n");printf("II\n");printf("0\n");printf("<H>\n");printf("II\n");return0;......
  • C++中指针和数组相关的运算符优先级
    概述本文深入介绍了与指针和数组相关的运算符优先级,利用代码示例展示了当左结合和右结合运算符同时存在时的结合方式,同时也演示了如何使用()来强制人为指定结合顺序。指针、数组相关的运算符优先级下表展示了相关运算符的优先级,有4个级别,同级别内的运算符按照结合性依次调用。......
  • Js运算符(操作符)
    算数运算符a=1+1//2a=10-5//5a=10/5//2a=10/0//js中除以0不会报错,结果是Infinitya=2*2//4a=2**2//a=10%4//取余,2js中算数运算,除了字符串的加法,会自动将非数值转换为int进行计算,不像其他语言会报错a=10+true//11a=10......
  • 初学Java基础Day09---不死神兔,方法版本的万年历
    一,不死神兔(方法递归版)不死神兔也叫做斐波那契数列或者叫做黄金分割数列或者叫做兔子数列:不死神兔问题:有1对兔子,从出生后的第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子1.找规律当月兔子的对数等于上个月对数加上上......
  • Java数据类型与运算符
    前言Java是一种广泛使用的编程语言,它以其“一次编写,到处运行”(WriteOnce,RunAnywhere,简称WORA)的理念而闻名。Java的学习将伴随着该文章展开!!一.数据类型Java的数据类型大体与C语音相类似,又有些许不同,且听我道来。基本数据类型分为整型,字符型,浮点型以及布尔类型! 1.1......
  • 友元运算符重载函数
    目录1.定义友元运算符重载函数的语法形式2.双目运算符重载3.单目运算符重载1.定义友元运算符重载函数的语法形式        (1)在类的内部,定义友元运算符重载函数的格式如下:friend函数类型operator运算符(形参表){函数体}        (2)在类中,声明友......
  • java字符串连接和运算符优先级
    源代码:publicclassEnumTest{publicstaticvoidmain(String[]args){intx=100;inty=200;System.out.println("x+y="+y+x+y);System.out.println(x+y+"=x+y");}}程序输出:x+y=200100200300=x......
  • C++友元和运算符重载
    目录一.友元friend1.1概念1.2友元函数1.3友元类1.4友元成员函数二.运算符重载2.1概念2.2成员函数运算符重载2.3成员函数运算符重载2.4特殊运算符重载2.4.1赋值运算符重载2.4.2类型转换运算符重载2.5注意事项三、std::string字符串类(熟悉)一.友元......
  • Java编程基础(基本语法==>运算符)
    文章目录一、基本语法①注释②标识符③关键字④常量二、变量①变量的定义②基本数据类型③基本数据类型的级别与数据转换三、运算符①算数运算符②赋值运算符(=)③关系运算符④逻辑运算符⑤三目运算符⑥位运算符⑦运算符优先级总结提示:以下是本篇文章正文内容,下面......