数值类型的运算方式总结

一,常见的位运算使用场景

位运算是按照整数的二进制进行移位,与,或,非,异或的运算,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等数据类型(浮点型不能进行位运算)。由于,位运算由于直接采用二进制进行计算,所以往往可以得到计算性能的提升。

1,移位运算

<<n左移n位相当于乘以2的n次方,>>n右移n位相当于除以2的n次方

        int n=8;
		int b=n>>1;//相当于除以2的一次方
		int c=n<<4;//相当于乘以2的4次方
		System.out.println(b);
		System.out.println(c);

2,与运算&

与运算规则:必须同时为1,才为1

        int i=1444444;//0001 0110 0000 1010 0101 1100
		int n=295959; //0000 0100 1000 0100 0001 0111
		int x=i&n;
		System.out.println(x);//0000 0100 0000 0000 0001 0100
	

3,或运算|

|或运算的运算规则是:只要一个为1,结果就为1

        int i=1444444;//0001 0110 0000 1010 0101 1100
		int n=295959; //0000 0100 1000 0100 0001 0111
		int x=i&n;
		int m=i|n;
		System.out.println(m);//0001 0110 1000 1110 0101 1111
		System.out.println(x);//0000 0100 0000 0000 0001 0100

4,非运算~

非运算的运算规则:0和1互换

        int i=1444444;//0001 0110 0000 1010 0101 1100
		int n=295959; //0000 0100 1000 0100 0001 0111
		int x=i&n;
		int m=i|n;//1110 1001 1111 0101 1010 0011
		int q=~i;
		System.out.println(q);

5,异或运算^

异或运算规则:如果像个数不同,结果为1,否则为0

        int i=1444444;//0001 0110 0000 1010 0101 1100
		int n=295959; //0000 0100 1000 0100 0001 0111
		int b=i^n;//0001 0010 1000 1110 0100 1011

二,整数类型运算时类型溢出的问题,产生原因及解决办法

1,整数运算时的基本规则

在Java中,整数的运算遵循四则运算规则;算术运算符:+,-,*,/,%。

public static void main(String[] args) {
		int a=10;
		int b=2;
		int add=a+b;
		System.out.println("两数相加:"+add);
		
		int c=a-b;
		System.out.println("两数相减:"+c);
		
		int d=a*b;
		System.out.println("两数相乘:"+d);
		
		int m=a/b;
		System.out.println("两数相除:"+m);
		
		int g=a%c;
		System.out.println("取余"+g);
	}

 

2,整数计算时产生的类型溢出问题

产生原因:由于整数存在范围限制(-2147483647-2147483647),如果计算结果超出了范围,就会产生溢出,二溢出不会出错,会的到一个不正确的数值。

        int a1=2147483647;
		int sum=a1+a;
		System.out.println(sum);

 

解决办法:可以把int类型换成long类型,或使用BigInteger存储

long a1=2147483647;
long sum=a1+a;
System.out.println(sum);

 

public static void main(String[] args) {
		//使用BIGUNGTER保存大整数
		BigInteger n1=new BigInteger("2147162788888");
		BigInteger n2=new BigInteger("2147162788886");
		
		//加法
		BigInteger sum=n1.add(n2);
		System.out.println(sum);
		//减法
		BigInteger sub=n1.subtract(n2);
		System.out.println(sub);
		//乘法
		BigInteger mul=n1.multiply(n2);
		System.out.println(mul);
		//除法
		BigInteger div=n1.divide(n2);
		System.out.println(div);
}

 

三,浮点数类型运算时产生的精度丢失问题,产生原因及解决办法

 1,浮点数运算精度丢失问题

浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示,会出现精度丢失问题。

        double a=0.1;
		double b=0.22;
		double c=a/b;
		System.out.println(c);

解决办法:

        BigDecimal n1=new BigDecimal("3.1415926");
		 BigDecimal n2=new BigDecimal("0.348");
		//加法
		BigDecimal sum=n1.add(n2);
		System.out.println(sum);
		//除法
		//参数1:被除数
		//参数2:保留小数位数
		//参数3:截取方式:RoundingMode.HALF_DOWN为四舍五入方式
		BigDecimal div=n1.divide(n2,3,RoundingMode.HALF_DOWN);
		System.out.println(div);;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值