java选择整数计算_廖雪峰Java1-2Java程序基础-3整数运算

1.四则运算规则

int i =(100 + 200) * (99 -88);//3300

int 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);//0

System.out.println(b);//2

1.3.简写的+=和-=

//取示例1中的n的值

n += 100;//3409

n -= 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);

3f71116361ac759d012f50f66184c719.png

2.移位运算

左移 <<

右移 >>

不带符号右移 >>>

byte和short会先转换为int再进行移位

384b4774d76e1b94834e7fca350eedf5.png

int n1 = 5;

String s1 = Integer.toBinaryString(5);

System.out.println("5的二进制:"+s1);

System.out.println();

int n2 = n1 << 10;//左移10位,在后面加10个0

String 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个0

String 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);

fa5221380b9f68662d6d58cf0ae5054e.png

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));

d01fe4ba7882e49785c32dc60b1bd4d0.png

具体过程参看下图

deab50c28ae7b21bd94d08c16b844018.png

4.运算优先级

b37ded142929c1eefea410d03c9f589e.png

记不住没关系,直接加括号就是

5.类型自动提升与强制转型

在运算过程中,计算结果为较大类型的整型

可以将结果强制转型:(类型)变量或数值。

强制转型可能丢失精度。long类型是64位,强制转为int类型,会将高位抛弃。

96b5ee5ec24125622b094d3fc8c2f1b1.png

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);//111689

System.out.println(y2);//111689

System.out.println(z);//410193920

6.总结:

整数运算结果永远精确

运算结果会自动提升

可以强制转型,但可能丢失精度

选择合适范围的整型(int, long)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值