廖雪峰Java1-2Java程序基础-3整数运算
1.四则运算规则
int i =(100 + 200) * (99 -88);//3300int n = i + 9;//3309//除法结果为整数int q = n / 100;//33//除数为0时运行将报错int x = n / 0;//抛出异常:Exception in thread "main" java.lang.ArithmeticException: / by zero
1.2.++运算和--运算
i++是先访问i然后再自增,而i++则是先自增然后再访问i的值
int i = 0;int a = i++;int b = ++i;System.out.println(a);//0System.out.println(b);//2
1.3.简写的+=和-=
//取示例1中的n的值n += 100;//3409n -= 100;//3309//取余运算符%int m = n % 100;//9
1.4整数运算运算规则
- 计算结果溢出不报错
- 计算结果是不正确的
解决方法:用范围更大的整型。
int i = Integer.MAX_VALUE;System.out.println(i);int x = i + 1;System.out.println(x);long y = (long)i + 1;System.out.println(y);
2.移位运算
- 左移 <<
- 右移 >>
- 不带符号右移 >>>
- byte和short会先转换为int再进行移位
int n1 = 5;String s1 = Integer.toBinaryString(5);System.out.println("5的二进制:"+s1);System.out.println();int n2 = n1 << 10;//左移10位,在后面加10个0String s2 = s1 + "0000000000";//字符串加10个0,得到二进制字符串System.out.println(s1+"~对字符串左移10位~"+s2+"\t转化为10进制数:"+Integer.parseInt(s2,2));System.out.println("直接左移10位:n2="+n2);System.out.println();int n3 = n2 >> 11;//右移11位,去掉11个0String s3 = "10";//s2=1010000000000去掉后面的11位数System.out.println(s2+"~右移10位~"+s3+"\t"+Integer.parseInt(s3,2));System.out.println("直接右移11位:n3="+n3);System.out.println();int n4 = n1 << 29;//最高位是符号,1表示符号,0表示整数System.out.println(n1+"直接左移29位:"+n4);System.out.println();int n5 = n4 >> 29;//保留符号位右移String s5 = "10";//s2=1010000000000去掉后面的11位数System.out.println(n4+"直接右移29位:"+n5);System.out.println();int n6 = n4 >>> 29;//无条件右移System.out.println(n4+"无条件右移11位:"+n6);
3.位运算
通常2个整数进行位运算,首先按位对齐,依次对每一位进行进行位运算。
3.1位运算 与运算& 2个都为1,结果为1
- 1 & 1 = 1, 1 & 0 = 0, 0 & 1 = 0,0 & 0 = 0
3.2或运算| 有1个为1,结果为1
- 1 | 1 = 1, 1 | 0 = 0, 0 | 1 = 0,0 | 0 = 0
3.3亦或运算^不相同结果为1
- 1 ^ 1 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1,0 | 0 = 0
3.4非运算~
- ~ 1 = 0, ~ 0 = 1
int n1 = 0x03_83_d0_25;int n2 = 0x00_00_ff_ff;int n3 = n1 & n2;int n4 = n1 | n2;System.out.println(n3);System.out.println(n4);System.out.println(Integer.toBinaryString(n1));System.out.println(Integer.toBinaryString(n2));System.out.println("n1&n2:"+Integer.toBinaryString(n3));System.out.println("n1|n2:"+Integer.toBinaryString(n4));
具体过程参看下图
4.运算优先级
记不住没关系,直接加括号就是
5.类型自动提升与强制转型
- 在运算过程中,计算结果为较大类型的整型
- 可以将结果强制转型:(类型)变量或数值。
- 强制转型可能丢失精度。long类型是64位,强制转为int类型,会将高位抛弃。
short s = 12;int i = 100 +s;long n = 999 * i;//int x = n - 199;//编译错误int y1 = (int)(n - 199);int y2 = (int)n - 199;int z = (int)(n * 100000000);System.out.println(y1);//111689System.out.println(y2);//111689System.out.println(z);//410193920
6.总结:
- 整数运算结果永远精确
- 运算结果会自动提升
- 可以强制转型,但可能丢失精度
- 选择合适范围的整型(int, long)
转载于:https://www.cnblogs.com/csj2018/p/10242045.html
廖雪峰Java1-2Java程序基础-3整数运算相关推荐
- 【笔记】Python学习(廖雪峰)笔记①——Python基础知识
Python学习(廖雪峰)笔记①--Python基础知识 Python 基础知识 字符串与编码 ASCII.Unicode.UTF-8 Python字符串 格式化 使用list和tuple list( ...
- Java教程 -- 廖雪峰
Java快速入门 Java简介 Java介于编译型语言和解释型语言之间.编译型语言如C.C++,代码是直接编译成机器码执行,解释型语言如Python可以由解释器直接加载源码然后运行,代价就是运行效率太 ...
- java廖雪峰_廖雪峰Java教程学习笔记(一)——Java程序基础
(一)Java程序基本结构 Java是面向对象的语言,一个程序的基本单位就是class.在class内部,可定义若干方法. 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写 ...
- 廖雪峰Python基础练习(二)
#廖雪峰Python基础练习(二)# 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串: 答: # -*- coding: utf-8 -*-n1 = 255 n2 = 10 ...
- 如何找到python廖雪峰基础_python3 基础 廖雪峰教程笔记-1
廖雪峰教程文档:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143252 ...
- python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?
廖雪峰的Python教程已经很友好了,接近于把饭喂到嘴边了. 这不是廖雪峰教程的问题,而是一个基础代码技能和实际应用需求的代码技能差距太远导致的. 如果是新手,只学会了廖雪峰Python教程,那约等于 ...
- Java基础知识 廖雪峰教程笔记
Java基础知识 Java基础知识 java简介 名词解释 运行Java程序 Java基本数据类型 模块 包装类型 记录类 异常处理 Java异常 使用Commons Logging 使用log4j ...
- Python 3 学习(一)—— 基础:廖雪峰 Python 教程学习笔记
文章目录 Python教程 值类型和引用类型 列表和字典的基本操作 列表 元组 字典 Set 函数 内置函数 定义函数 空函数 参数检查 定义默认参数要牢记一点:默认参数必须指向不变对象! Pytho ...
- python学习笔记1——(廖雪峰教程,菜鸟教程)python基础
python学习笔记1--(廖雪峰教程,菜鸟教程) https://www.liaoxuefeng.com(https://www.liaoxuefeng.com) 阿修视频 .Python基础(复习 ...
最新文章
- 图解Windows下开发Objective-C程序之一 - 搭建Objective-C开发环境
- 在Kaggle上免费使用GPU
- checkbox保存和赋值
- python获取服务器文件svn版本信息_如何编程获取SVN版本号?
- 震惊!谷歌专家爆料:Python和AI这回真的玩大了!网友:好方法!
- 自定义字体需要css的,CSS 自定义字体
- Unix-Center.Net需要你的帮助
- 【爬虫Practice2】爬取豆瓣高分电影
- ks 曲线_ROC曲线与KS曲线的理解
- C++: STL: atomic
- MATLAB图像如何显示希腊字母、上下标(alpha、beta等)
- 有趣的手机壁纸——水印壁纸
- F - Shifting String(置换的阶+思维)
- ua识别(浏览器标识识别)
- POJ 1287-Networking
- [经验]HP小机一次无故当机的经历总结
- thisis incompatible with sql_mode=only_full_group
- 浅析Statement和PreparedStatement的区别
- stunnel客户端的使用
- UIStoryboardSegue(多控制器)
热门文章
- 换一个角度再谈一下WF
- ajax跨域,这应该是最全的解决方案了
- Google使用机器学习助力数据中心节能
- 基于特征点匹配的自适应目标跟踪算法
- 背景建模与前景检测3(Background Generation And Foreground Detection Phase 3)
- 使用kubeadm 安装 kuberntes 1.13.3
- python函数解释
- Uva 10562 看图写树
- http://www.cnblogs.com/qtqq/p/5271164.html
- java操练之求两数最大公约数的两种算法思路