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

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

说明

分类

Java语言支持如下运算符:

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

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

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

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

◆ 条件运算符:? :。

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

优先级

优先级如下图所示:

算术运算符

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

单目运算符

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

双目运算符

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

关于++和--

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

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

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

结果为:

 a = 1
b = 0

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

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

结果为:

 a = 1
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。

Java编程基础——运算符和进制的更多相关文章

  1. Java编程基础-运算符

    Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+  -  *  /  %  ++  -- (2).赋值运算符:=  +=  -=  * ...

  2. java编程基础二进制

    0.java编程基础 01.二进制(原码,反码,补码) 02.位运算 03.移位运算符 二进制 原码,反码,补码 1.基本概念 二进制是逢2进位的进位制,0,1是基本算符. 现在的电子计算机技术全部使 ...

  3. Java入门——(1)Java编程基础

    Java入门--(1)Java编程基础 第二章 Java编程基础   JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 }   2.1关键字:赋予了特殊含义的单词.   2.2标识符: ...

  4. Java编程基础——常量变量和数据类型

    Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...

  5. Java开发知识之Java编程基础

    Java开发知识之Java编程基础 一丶Java的基础语法 每个语言都有自己的语法规范.例如C++ 入口点是main. 我们按照特定格式编写即可. Java也不例外. Java程序的语法规范就是 Ja ...

  6. 编程实现将一个N进制数转换成M进制数

    问题:编程实现将一个N进制数转换成M进制数.(c/c++.Java.Javascript.C#.Python) 1.Python 手写算法版 def conversion_num(num, src, ...

  7. java学习之常量与进制

    java中的常量包括以下几类: 1.整型常量,比如:3,5,89,99 2.浮点型常量:比如1.23,5.98,3.1415926 3,字符常量:'a','c','1'(需要注意的一点是字符常量只能包 ...

  8. 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

    前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...

  9. java byte数组与16进制间的相互转换

      java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...

随机推荐

  1. Python类的定义、方法和属性使用

    类用来描述具有相同的属性和方法的对象的集合.对于在类中定义的函数,称为方法.类变量不直接叫做类变量,称为属性. 1.类的定义 例子: class User(): pass 说明: (1)定义了一个类名 ...

  2. unittest,requests,assertEqual实战演练

    请求方式:POST请求url:https://api.apiopen.top/developerLogin请求参数:名称 类型 必须 描述 示例name string 是 账号 peakchaopas ...

  3. Python自动化运维之高级函数

    本帖最后由 陈泽 于 2018-6-20 17:31 编辑 一.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没 ...

  4. day6_logging模块

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/11 9:12 # @Author : 大坏男孩 # @File : da ...

  5. (day51)三、ORM、路由层、版本差异、流程图

    目录 一.ORM关系建立 (一)ForeignKey(一对多) (二)ManyToManyField(多对多) (三)OneToOneField(一对一) 二.django请求生命周期流程图 三.ur ...

  6. Python tempfile (临时文件)

    Python tempfile 大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存 临时文件不用命名,且使用后会被自动删除 TemporaryFile 使用 TemporaryFile ...

  7. 为什么用时序电路实现CPU

    时序电路 我们带着如下疑问来看时序电路: 1.为什么CPU要用时序电路,时序电路与普通逻辑电路有什么区别. 2.触发器.锁存器以及时钟脉冲对时序电路的作用是什么,它们是如何工作的. 带着这两个问题,我 ...

  8. Paper | Quality assessment of deblocked images

    目录 1. 故事 2. 失真变化 3. 方法(PSNR-B) 4. 实验 这篇文章提出了一个PSNR-B指标,旨在衡量 压缩图像的块效应强度 或 去块效应后的残留块效应强度(比较去块效应算法的优劣). ...

  9. Paper | Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform

    目录 故事背景 空域特征转换 超分辨率网络 发表在2018年CVPR. 摘要 Despite that convolutional neural networks (CNN) have recentl ...

  10. Navicat Premium Mac 12 破解(亲测可用!!!)

    今天不知怎的,出于强迫症的我就是要强行搞个Navicat Premium Mac 12 破解版本. 历经了种种种种种种磨难与艰辛与火海,终于破解成功了. 因为要经常使用MySQL,使用命令行那是相当的 ...