zoukankan      html  css  js  c++  java
  • Java编程基础——运算符和进制

    Java编程基础——运算符和进制

    摘要:本文主要介绍运算符和进制的基本知识。

    说明

    分类

    Java语言支持如下运算符:

    ◆ 算术运算符:++,--,+,-,*,/,%。

    ◆ 赋值运算符:=,+=,-=,*=,/=,%=。

    ◆ 关系运算符:>,<,>=,<=,==,!=。

    ◆ 逻辑运算符:&,|,!,^,&&,||。

    ◆ 条件运算符:? :。

    ◆ 位运算符:&,|,~,^,>>,<<,>>>。

    优先级

    优先级如下图所示:

    算术运算符

    算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。

    单目运算符

    单目运算符主要有+(取正),-(取负),++(自增),--(自减)。

    双目运算符

    双目运算符主要有+(相加),-(相减),*(相乘),/(相除),%(取余或者取模)。

    关于++和--

    只能用来操作变量,不能用来操作数值或者常量。

    自增(++)或自减(--)在变量后面,会先赋值,然后再计算:

    1 public static void main(String [] args) {
    2     int a = 0;
    3     int b = a++;
    4     System.out.println("a = " + a);
    5     System.out.println("b = " + b);
    6 }

    结果为:

    1 a = 1
    2 b = 0

    自增(++)或自减(--)在变量前面,会先计算,然后再赋值:

    1 public static void main(String [] args) {
    2     int a = 0;
    3     int b = ++a;
    4     System.out.println("a = " + a);
    5     System.out.println("b = " + b);
    6 }

    结果为:

    1 a = 1
    2 b = 1

    赋值运算符

    赋值运算符是指为变量或常量指定数值的符号,如可以使用“=”将右边的表达式结果赋给左边的操作数。

    主要有:=,+=,-=,*=,/=,%=。

    其中,

     a += b; 等价于 a = a + b; ,

     a -= b; 等价于 a = a - b; ,

     a *= b; 等价于 a = a * b; ,

     a /= b; 等价于 a = a / b; ,

     a %= b; 等价于 a = a % b; 。

    关系运算符

    比较运算符用于判断两个数据的大小,如大于、等于、不等于,比较的结果是一个布尔值。

    注意不要对浮点数进行相等性运算,比如 1.0 - 0.3 == 0.7 。

    注意

    >、<、>=、<=只支持左右两边操作数是数值类型。

    ==、!=两边的操作数既可以是数值类型,也可以是引用类型。

    比较equals和==的区别

    值类型的变量存储在内存中的堆栈(简称栈),引用类型的变量在栈中仅仅是存储变量的地址,而其本身则存储在堆中。

    ==操作比较的是两个变量的值是否相等,对于引用型表示的是变量存储的地址是否相同,即栈中的内容是否相同。

    equals操作判断是否为一个对象的引用,即堆中的内容是否相同。

    ==比较的是地址,而equals比较的是内容,显然,当equals为true时,==不一定为true。

    逻辑运算符

    逻辑运算符主要用于进行逻辑运算。

    与(&):只有当两边都为真,结果才为真,如果有一边为假,结果为假。

    或(|):如果有一边为真,结果为真,只有当两边都为假,结果才为假。

    非(!):当右边为假,结果为真,当右边为真,结果为假。

    异或(^):当两边真假不一致即一边为真一边为假,结果才为真,两边同为真或两边同为假,结果均为假。

    短路与(&&):当左边为假,则不再判断右边,直接得出结果为假。

    短路或(||):当左边为真,则不再判断右边,直接得出结果为真。

    条件运算符

    条件运算符(? :)也称为“三元运算符”。

    语法形式:布尔表达式 ? 表达式1 : 表达式2;

    运算过程:如果布尔表达式的值为真,则返回表达式1的值,如果布尔表达式的值为假,则返回表达式2的值。

    位运算符

    主要有位与(&),位或(|),位非(~),位异或(^),右移(>>),左移(<<),0符号位填充的右移(>>>)。

    位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。

    位运算与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值布尔型。

    右移(>>)是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。

    左移(<<)是将一个二进制数按指定移动的位数向左移位,移掉的被丢弃,右边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。

    将一个数左移会使该值乘以2的幂。

    将一个数右移会使该值除以2的幂。

    无符号右移(>>>)永远不会产生负号,因为其符号位总是被补零。不论被移动数是正数还是负数,左边移进的部分一律补0。

    进制

    常见的进制

    二进制:前缀是0B或0b,范围是(0-1)。

    八进制:前缀是0,范围是(0-7)。

    十进制:前缀不需要,范围是(0-9)。

    十六进制:前缀是0X或0x,范围是(0-9 A-F)或者(0-9 a-f)。

    进制的转换

    其他进制转换为十进制

    ◆ 二进制转换为十进制:从右往左开始计算(幂从0开始依次递增),每一位乘以2,最后结果累加。

    ◆ 八进制转换为十进制:从右往左开始计算(幂从0开始依次递增),每一位乘以8,最后结果累加。

    ◆ 十六进制转换为十进制:从右往左开始计算(幂从0开始依次递增),每一位乘以16,最后结果累加。

    十进制转换为其他进制

    ◆ 十进制转换为二进制:一直除以2,求出每次的余数,直到商为0为止,最后余数倒过来就是二进制数。

    ◆ 十进制转换为八进制:一直除以8,求出每次的余数,直到商为0为止,最后余数倒过来就是八进制数。

    ◆ 十进制转换为十六进制:一直除以16,求出每次的余数,直到商为0为止,最后余数倒过来就是十六进制数。

    其他进制转换为二进制

    ◆ 八进制转换为二进制:从最低位开始算,每一位转换一个三位的二进制数,最后拼成一个最终的二进制数。

    ◆ 十六进制转换为二进制:从最低位开始算,每一位转换成一个四位的二进制数,最后拼成一个最终的二进制数。

    二进制转换为其他进制

    ◆ 二进制转换为八进制:从最低位开始算,每三位转换成一个十进制数,最后拼成一个八进制数。

    ◆ 二进制转换为十六进制:从最低位开始算,每四位转换成一个十进制数,最后拼成一个十六进制数。

    原码、反码、补码

    概念

    原码:人最容易看得懂和理解的一种形式,进制转换都是原码。

    反码:计算机为了让符号位参与运算,所以有了反码。

    补码:计算机为了解决0的符号问题,所以有了补码。

    特点

    正数:正数的原码、反码、补码都一样。

    负数:负数的反码符号位不变,其他位取反。负数对的补码符号位不变,在反码基础上加1。

  • 相关阅读:
    Smarty数据、模版创建指引
    做了个google工具栏的饭否按钮
    php程序调试(远程调试,firephp)
    Linux shell编程与Makefile的一些记录(等待更新)
    My MSSQL Tips
    Castle.ActiveRecord中Save与SaveAndFlush的性能差别
    Linux Basic Approach (My Notes)
    去青城后山玩了一天
    Infopath 2007 使用实践(占位)
    Delphi 6
  • 原文地址:https://www.cnblogs.com/shamao/p/10075730.html
Copyright © 2011-2022 走看看