最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • java运算符的基础是你对数学和计算机原理的要求

    前言

    学习java运算符的基础是你对数学和计算机原理有一定的要求。如果文中的一些位操作不明白什么是生取余符号的运算优先级,建议大家学习计算机原理和计算机作文类的书籍。不需要太深入,只要了解计算机的大体结构、变量存储、相关位运算、反码等即可;尽量用例子让缺乏计算机原理的读者理解位操作。下面也是详细介绍。基础差的读者,一定要读完。我对0基础读者的要求是看懂作者的文章。跟着Knock it一次,然后在网上或书本上找到对应的题目进行练习;

    java8新特性中的操作符本文不会出现。进阶学习者可以参考作者的相关文章。初学者可以从这篇文章中学习。更多基础文章请参考作者基础系列专栏;

    两个算术运算符2.1个一元运算符

    一元运算符是指只对一个表达式进行运算,可以是数值数据类型类别中的任意数据类型;表达式是什么,表达式可以是变量(如a),也可以是变量和数学符号的组合(如a+b);

    一元运算符

    – 符号取反,负数取反为正数,正数取反为负数; — 自减,自减表示变量自减1++ 自增,自增表示变量加到自身1

    例子:

    public class Arithmetic {
        public static void main(String[] args) {
            int zszxz1 = 100;
            // 取负
            int a = -zszxz1;
            // 自减先赋值后运算
            int b = zszxz1--;
            // 自减先运算后赋值
            int c = --zszxz1;
            // 自增先赋值后运算
            int d = zszxz1++;
            // 自增运算后赋值
            int e = ++zszxz1;
            System.out.println("取负:"+a);//-100
            System.out.println("自减先赋值后运算:"+b);//100 先将 zszxz1赋值给b,zszxz1再减1
            System.out.println("自减先运算后赋值:"+c);//98 (注意此时zszxz1值是99)先将 zszxz1 减1 再复制给c
            System.out.println("自增先赋值后运算:"+d);//98 (注意此时zszxz1值是98)先将 zszxz1 赋值给 d 再将 zszxz1加1
            System.out.println("自增运算后赋值:"+e);//100 (注意此时zszxz1值是99) 先将 zszxz1 加1 再赋值给 e
        }
    }

    2.2 个二元运算符

    二元运算是两个元素组成第三个元素的规则;它的意思很简单,就是用左右两个表达式,用运算符连接起来得到结果;

    + 表示添加两个表达式; – 表示减去两个表达式; * 表示将两个表达式相乘; / 表示取两个表达式的商; % 表示两个表达式取余数;

    例子:

    public static void main(String[] args) {
            int zszxz2 = 10;
            int zszxz3 = 3;
            int a = zszxz2 + zszxz3;
            int b = zszxz2 - zszxz3;
            int c = zszxz2 * zszxz3;
            int d = zszxz2 / zszxz3;
            int e = zszxz2 % zszxz3;
            System.out.println("相加 :"+a);// 13
            System.out.println("相减 :"+b);// 7
            System.out.println("相乘 :"+c);// 30
            System.out.println("求商 :"+d);// 3
            System.out.println("取余 :"+e);// 1
            // 10 除以 3 是 商是 3 余数为1  你可以反过来理解 3 * 3 + 1 = 10 
        }

    三次赋值操作=表示赋值,是将一个变量的值复制到另一个变量的过程; += 表示加法和赋值; -= 表示减法和赋值; *= 表示乘法和赋值;/= 表示取商和赋值; %= 表示取余并赋值;

    例子:

    public static void main(String[] args) {
            int zszxz4 = 10;
            int zszxz5 = 3;
            int a = zszxz4;
            System.out.println("赋值:"+a);//10
            // 等同于 zszxz5 = zszxz5 - zszxz4
    

    大数取模运算_c语言里取余数的运算_取余符号的运算优先级

    zszxz5 -= zszxz4; System.out.println("减并赋值 :"+zszxz5);//-7 // 等同于 zszxz5 = zszxz5 + zszxz4 zszxz5 += zszxz4; System.out.println("加并赋值 :"+zszxz5);//3 // 等同于 zszxz5 = zszxz5 * zszxz4 zszxz5 *= zszxz4; System.out.println(" 乘并赋值:"+zszxz5);//30 // 等同于 zszxz5 = zszxz5 / zszxz4 zszxz5 /= zszxz4; System.out.println(" 取商并赋值:"+zszxz5);//3 // 等同于 zszxz5 = zszxz5 % zszxz4 zszxz5 %= zszxz4; System.out.println("取余并赋值 :"+zszxz5);//3 }

    四位操作符4.1位操作说明:

    计算机中有许多位运算符。计算机在进行运算时使用二进制计算,也就是说,它用0和1来表示运算(例如0000 1000),主要表示计算机的正负数)。必须有原码、反码和补码(补码=反码+1)),后面会解释;

    什么是位运算?位运算是指使用位运算符对二进制进行运算的结果。详细的位操作符号如下表所示;下图可以帮助读者更好地理解什么是位,每个位是2的幂。经过计算,我们会得到我们想要的结果;不同基数的位数不同,不同数据类型的位数也不同;

    计算机中的位图示例:

    c语言里取余数的运算_大数取模运算_取余符号的运算优先级

    4.2位运算符号

    带赋值运算的位运算与普通位运算没有太大区别,笔者不再赘述,如果是初学者请自行实现;

    c语言里取余数的运算_大数取模运算_取余符号的运算优先级

    4.三位负数

    负数是指取原值的绝对值,再取反码,加1;反码是指反转位数的值。 ,1的取反为0;注意计算机中的最高位代表符号位,0代表正数,1代表负数。在位的左右移动过程中,正数表达式为原码(原二进制),其运算结果不会丢失精度,比较简单。下面不举例,详细说明负数的位移动;

    以字节-6为例:

    -6取二进制6的绝对值:0000 01106的补码:1111 10016的补码加1:1111 1010

    在 java 中,byte 默认会转换为 int(32 位)。默认情况下,我们将 int 的高位加 1。最终的-6表示结果如下:1111 1111 1111 1111 1111 1111 1111 1010

    好的,你在计算的时候需要把这个过程倒过来,你会得到一个我们可以识别的负数;后面的学习其实是有办法操作的,真的不用计算,明白就好,怕你失去学习的自信;

    public static void main(String[] args) {
            byte zszxz1 = -6;
            // -6
            System.out.println(zszxz1);
        }

    4.4 左移

    左移比较简单。位运算中,位数直接左移,低位直接补0,不损失精度;

    public static void main(String[] args) {
            byte zszxz1 = -6;
            // -24
            System.out.println(zszxz1<<2);
        }

    我们需要分析(也就是上面提到的逆过程):

    -6 二进制:1111 1111 1111 1111 1111 1111 1111 1010-6 左。 0001 1000 计算后加减号: – ( 2^3 + 2^4) = -(8 + 16) =-244.5 右移

    位运算时,右移为正数,高位补0,负数补1,所以运算时不会损失精度;

    -6二进制:1111 1111 1111 1111 1111 1111 1111 1111 1111 1010-6狗屎右:1111 1111 1111 1111 1111 1111 1111 1111 1111 1110减去1:1111 1111 1111 1111 1111 1111 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111成2^1 ) = -2

    public static void main(String[] args) {
            byte zszxz1 = -6;
            // -2
            System.out.println(zszxz1>>2);
        }

    4.6 无符号右移

    无符号右移指无符号移动,高位补0;负数无符号右移可能导致精度损失;

    -6 二进制:1111 1111 1111 1111 1111 1111 1111 1010-6 无符号右移两位:0011 1111 1111 1111 1111 1111 1111 1110 计算:2^1 +2^2+……. + 2^29 = 1073741822

    public static void main(String[] args) {
            byte zszxz1 = -6;
            // 1073741822
    

    取余符号的运算优先级_大数取模运算_c语言里取余数的运算

    System.out.println(zszxz1>>>2); }

    我们转换成十六进制进行验证:

    public static void main(String[] args) {
            int z = 0x3ffffffe;
            // 1073741822
            System.out.println(z);
        }

    4.7 否定

    使用符号~表示否定,很容易具备以上基础;

    -6 二进制:1111 1111 1111 1111 1111 1111 1111 1010-6 求反:0000 0000 0000 0000 0000 0000 0101 计算:( 2^1 + 2^2)= 5

    public static void main(String[] args) {
            // -5
            System.out.println(~-6);
        }

    4.8 位与

    位与运算使用符号&,表示只有1和1为AND结果为1,其他情况结果为0;

    19 表示:0001 001117 表示:0001 0001 阶段和结果:0001 0001

    public static void main(String[] args) {
        // 19
        byte zxzxz1 = 0b00010011;
        // 17
        byte zxzxz2 = 0b00010001;
        // 17
        System.out.println(zxzxz2 & zxzxz1);
    }

    4.9 位数字或

    按位或运算使用符号 | , 仅当 0 和 0 为 ORed 时为 0,其他情况下为 1;

    19 表示:0001 001117 表示:0001 0001 相位或:0001 0011

    public static void main(String[] args) {
            // 19
            byte zxzxz1 = 0b00010011;
            // 17
            byte zxzxz2 = 0b00010001;
            // 19
            System.out.println(zxzxz2 | zxzxz1);
        }

    4.10 位异或

    位异或的符号是^,当位和对应的位值不同时为1(例如0和1),相同的值是0(例如1和1);

    19 表示:0001 001117 表示:0001 0001 异或:0000 0010

    public static void main(String[] args) {
            // 19
            byte zxzxz1 = 0b00010011;
            // 17
            byte zxzxz2 = 0b00010001;
            // 2
            System.out.println(zxzxz2 ^ zxzxz1);
        }

    五个关系运算符

    关系运算符是比较两个表达式之间的关系。和c一样,java也提供了6种关系运算符。它的值只有真取余符号的运算优先级,或者假,即布尔类型,在数学上习惯叫真假;

    c语言里取余数的运算_取余符号的运算优先级_大数取模运算

    public static void main(String[] args) {

    int zszxz1 = 1024;
        int zszxz2 = 1327;
        // 判断大于
        boolean a = zszxz1 > zszxz2;
        // 判断小于
        boolean b = zszxz1 
        boolean c = (zszxz1 == zszxz2);
        // 判断大于等于
        boolean d = zszxz1 >= zszxz2;
        // 判断小于等于
        boolean f = zszxz1 <= zszxz2;
        // 判断不等于
        boolean g = zszxz1 != zszxz2;
        // 输出
        System.out.println("1是否大于2:"+a);//false
        System.out.println("1是否小于2:"+b);//true
        System.out.println("1是否等于2:"+c);//false
        System.out.println("1是否大于等于2:"+d);//false
        System.out.println("1是否小于等于2:"+f);//true
        System.out.println("1是否不等于2:"+g);//true
    }

    六个逻辑运算符

    逻辑运算符是指两个表达式的运算(它们的结果都是真或假),结果也是布尔值;

    c语言里取余数的运算_取余符号的运算优先级_大数取模运算

    短路and和短路or比普通and-sum or更快;例如,一个 || b 如果a为真,则整个公式为真,不再判断b,只有当a为假时,才判断b;又如a && b,如果a为假,则整个公式为假,不再判断b。只有当a为真时,才会判断b是真还是假,普通or和and才会判断,建议使用短接and,短接或者提高运算效率;

    public static void main(String[] args) {

    boolean zszxz1 = 1 > 2;//false
        boolean zszxz2 = 1 < 2;//true
        // 取非
        boolean a = !zszxz1;
        // 逻辑与
        boolean b = zszxz1 & zszxz2;
        // 逻辑或
        boolean c = zszxz1 | zszxz2;
        // 短路与
        boolean d = zszxz1 && zszxz2;
        // 短路或
        boolean g = zszxz1 || zszxz2;
        System.out.println("false取非 :"+a);//true
        System.out.println("false与true :"+b);//false
        System.out.println("false或tre :"+c);//true
        System.out.println("false短路与true :"+d);//false
        System.out.println("false短路或true :"+g);//true
    }

    七个三元运算符

    三元运算符是指通过两个运算符号连接三个表达式( boolean-express ? value1 : value2 )。可以看出,boolean-express表达式的最终运算结果是一个布尔值,如果值为true,则整个公式的最终结果为value1,否则最终结果为value2;流行的会是:我问小伙伴你今天几岁了,如果小伙伴说你不知道(boolean-express是假的),那我就拿着大棒棒糖在大人面前晃一晃孩子们。小朋友要的时候,我自己吃了(值2),感觉好便宜;如果小伙伴回复他知道(boolean-express为真),而且给定年龄,我就给给小锅友的棒棒糖(value1);即根据布尔类型表达式的结果给出两个选择结果;这个和后面学到的if-else语句一样。的结果,初学者留下印象;

    public static void main(String[] args) {
            // 3 是否大于是 ,是返回 5否则返回6
            int i = 3 > 4 ? 5 : 6;
            System.out.println(i);// 6
            // 2 左移3位后是否大于7,是返回2.0,否则返回1.0
            double d = (2 < 7 ? 2.0 : 1.0;
            System.out.println(d);//2.0
            // 0b0001000 或上 0b01010101 是否大于100,是返回 0b10001000 否则返回0b1
            byte b = (0b0001000 | 0b01010101) > 100 ? 0b10001000 : 0b1;
            System.out.println(b);// 1
        }

    八种对象类型判断

    如前文所述,每个对象都有一个类型。如何判断对象是否属于那个类型需要用到instanceof关键字。所以初学者应该留下印象,了解这个关键字的具体作用。后面的文章会用到类继承;运算符符号的优先级大致为[算术->位->关系->逻辑->赋值],使用优先级时建议使用括号,以免出错;

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » java运算符的基础是你对数学和计算机原理的要求

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论