Java编程基础——运算符和进制
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编程基础——运算符和进制的更多相关文章
- Java编程基础-运算符
Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+ - * / % ++ -- (2).赋值运算符:= += -= * ...
- java编程基础二进制
0.java编程基础 01.二进制(原码,反码,补码) 02.位运算 03.移位运算符 二进制 原码,反码,补码 1.基本概念 二进制是逢2进位的进位制,0,1是基本算符. 现在的电子计算机技术全部使 ...
- Java入门——(1)Java编程基础
Java入门--(1)Java编程基础 第二章 Java编程基础 JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 } 2.1关键字:赋予了特殊含义的单词. 2.2标识符: ...
- Java编程基础——常量变量和数据类型
Java编程基础——常量变量和数据类型 摘要:本文介绍了Java编程语言的常量变量和数据类型. 常量变量 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改. 变量的定义 一块内存中的数据存储 ...
- Java开发知识之Java编程基础
Java开发知识之Java编程基础 一丶Java的基础语法 每个语言都有自己的语法规范.例如C++ 入口点是main. 我们按照特定格式编写即可. Java也不例外. Java程序的语法规范就是 Ja ...
- 编程实现将一个N进制数转换成M进制数
问题:编程实现将一个N进制数转换成M进制数.(c/c++.Java.Javascript.C#.Python) 1.Python 手写算法版 def conversion_num(num, src, ...
- java学习之常量与进制
java中的常量包括以下几类: 1.整型常量,比如:3,5,89,99 2.浮点型常量:比如1.23,5.98,3.1415926 3,字符常量:'a','c','1'(需要注意的一点是字符常量只能包 ...
- 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...
- java byte数组与16进制间的相互转换
java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...
随机推荐
- Python类的定义、方法和属性使用
类用来描述具有相同的属性和方法的对象的集合.对于在类中定义的函数,称为方法.类变量不直接叫做类变量,称为属性. 1.类的定义 例子: class User(): pass 说明: (1)定义了一个类名 ...
- unittest,requests,assertEqual实战演练
请求方式:POST请求url:https://api.apiopen.top/developerLogin请求参数:名称 类型 必须 描述 示例name string 是 账号 peakchaopas ...
- Python自动化运维之高级函数
本帖最后由 陈泽 于 2018-6-20 17:31 编辑 一.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没 ...
- day6_logging模块
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/11 9:12 # @Author : 大坏男孩 # @File : da ...
- (day51)三、ORM、路由层、版本差异、流程图
目录 一.ORM关系建立 (一)ForeignKey(一对多) (二)ManyToManyField(多对多) (三)OneToOneField(一对一) 二.django请求生命周期流程图 三.ur ...
- Python tempfile (临时文件)
Python tempfile 大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存 临时文件不用命名,且使用后会被自动删除 TemporaryFile 使用 TemporaryFile ...
- 为什么用时序电路实现CPU
时序电路 我们带着如下疑问来看时序电路: 1.为什么CPU要用时序电路,时序电路与普通逻辑电路有什么区别. 2.触发器.锁存器以及时钟脉冲对时序电路的作用是什么,它们是如何工作的. 带着这两个问题,我 ...
- Paper | Quality assessment of deblocked images
目录 1. 故事 2. 失真变化 3. 方法(PSNR-B) 4. 实验 这篇文章提出了一个PSNR-B指标,旨在衡量 压缩图像的块效应强度 或 去块效应后的残留块效应强度(比较去块效应算法的优劣). ...
- Paper | Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform
目录 故事背景 空域特征转换 超分辨率网络 发表在2018年CVPR. 摘要 Despite that convolutional neural networks (CNN) have recentl ...
- Navicat Premium Mac 12 破解(亲测可用!!!)
今天不知怎的,出于强迫症的我就是要强行搞个Navicat Premium Mac 12 破解版本. 历经了种种种种种种磨难与艰辛与火海,终于破解成功了. 因为要经常使用MySQL,使用命令行那是相当的 ...