Java整数运算

1、四则运算

        加 +、减 -、乘 *、除(求商) /、求余 %

int x = 12345 / 67;
System.out.println(x);    // 求商,输出结果:184
int y = 12345 % 67;
System.out.println(y);   // 求余,输出结果:17

2、溢出

        需要特别注意,整数由于存在范围限制,如果计算结果超出范围就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。

// 结果超出范围产生溢出
int x = 2147483640;
int y = 15;
int sum = x + y;
System.out.println(sum);    // 输出结果:-2147483641
// 将int转成long类型,long范围更大,所以结果不会溢出
long x1 = 2147483640;
long y1 = 15;
long sum1 = x1 + y1;
System.out.println(sum1);  // 输出结果:2147483655

3、自增/自减

        注意++写在前面和后面计算结果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。

int n = 3300;
n++;	// 相当于 n = n + 1
System.out.println(n);	// 输出结果:3301
n--;	// 相当于 n = n - 1
System.out.println(n);  // 输出结果:3300

4、移位运算和位运算

(1)在计算机中,整数总是以二进制的形式表示,int类型的整数使用4个字节的二进制。

        左移:<<  x,将整数二进制形式左移动x位

        右移:>> x,将整数二进制形式右移动x位

int n = 7; // 二进制表示位:000000000 00000000 00000000 00000111
int a = n << 1;
System.out.println(a);  // 输出结果:14
int b = n >> 2;
System.out.println(b);  // 输出结果:1

(2)位运算是按位进行与、或、非、异或的运算。

        与运算(&):必须两个数同时为1,结果才为1

        或运算(|):只要任意一个为1,结果就为1

        非运算(~):0和1互换

        异或运算(^):如果两个数不同,结果为1,否则为0

        两个整数进行运算实际上就是按位对齐,然后依次对每一位进行运算。

int n = 12; //   00001100
int m = 34; //   00100010
System.out.println(n & m);	//	输出结果:0
System.out.println(n | m);	//  输出结果:46

5、运算的优先级

6、类型自动提升与强制转型

(1)运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整数。

        如:short和int计算,结果总是int,原因是short首先自动被转型为int。

package org.test;

public class Test5 {
	
	public static String getType(Object obj) {
		/**
		 * 使用java中Object内置的方法getClass()即可,
		 * 返回Class类型,在后面加上toString()函数可以转换为字符串。
		 */
		// 查看数据类型使用getClass()函数,后面加上toString()函数转换为字符串
		return obj.getClass().toString();
	}
	public static void main(String[] args) {
		short s = 1234;
		int i = 123456;
		System.out.println(s + i);
		System.out.println(getType(s));      // 打印s类型
		System.out.println(getType(s + i));  // 打印s+i类型
	}
}

# 输出结果;
124690
class java.lang.Short
class java.lang.Integer

(2)强制转型,即将大范围的整数转型为小范围的整数。

        强制转型使用“(类型)”,如:将int强制转型为short。

        需要注意,超出范围的强制转型会得到错误的结果,原因是转型时int两个高位字节直接被扔掉,仅保留了低位的两个字节。

        可以强制转型,但超出范围的强制转型会得到错误的结果。

int i = 12345;
short s = (short)i;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值