linux小数点会自动进位吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux小数点会自动进位吗相关的知识,希望对你有一定的参考价值。
尊敬的用户,在Linux系统中,小数点是不会自动进位的,如果要进行小数进位的操作,可以使用round函数,根据需要可选择四舍五入、向上进位或向下舍入。 参考技术A linux小数点会自动进位既不是四舍五入也不是小数直接进位啊。 是准确值+估计值。准确值是你的尺子的最小刻度。(一般初中我们的尺子最小刻度是1毫米,比如准确值15毫米,估计值0.7毫米,所以就是15.7毫米)第五篇 JAVA运算符
一、算术运算符
算术运算符我们从小学就在学习了,加(+)减(-)乘(*)除(/)以及模数(%,整数除法获得余数)。整数除法会直接去掉小数,而不是进位,比如10/3=3;浮点数也可以进行除法,不过会进位。
Java也用一种简写形式进行运算,并同时赋值操作。这是由等号前的一个运算符标记的,而且对于语言中的所有运算符是固定的,比如,为了将4加到变量x,并将结果赋给x,可用:x+=4;
二、自动递增和递减
递减运算符是”--”意为值减-1,递增运算符是”++”意为值+1。这两个运算符主要注意他们出现在变量的位置,如果是出现在变量之前(--a或++a),则先执行计算,然后再将计算的值赋给变量,如果是出现在变量之后(a--或a++),则先给变量赋值,再执行计算操作。
int i = 1; System.out.println("++i:" + ++i); //先计算再赋值 System.out.println("i++:" + i++); //先赋值再计算 System.out.println("i:"+i); System.out.println("--i:" + --i); //先计算再赋值 System.out.println("i--:" + i--); //先赋值再计算 System.out.println("i:"+i);
输出结果:
++i:2 i++:2 i:3 --i:2 i--:2 i:1
三、逻辑运算符
逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true或false)。&&和||是二元运算符,&&只要其中有一个值是false,结果就为false,||刚好相反,只要其中有个值为true,结果就为true。!是一个一元运算符,如果值为true,结果就为false。
逻辑运算符主要注意的是它的”短路“,&&只要遇到false后面的表达式就不会被执行,||只要遇到true后面的表达式就不会被执行。
boolean b = 1 > 2 && 1/0 ==0; //1>2为false,1/0就不会被执行。 //boolean b1 = 1 < 2 && 1/0 ==0;//1<2为true,会执行1/0,就会报by zero异常 boolean b2 = 1 < 2 || 1/0 == 0; //1<2 为true,1/0不会被执行。 //boolean b3 = 1 > 2 || 1/0 == 0;//1>2为false,1/0就会被执行。
四、按位运算符
位运算在项目中用的还是比较少,我见过把位运算用的最精彩的地方是二进制权限控制。
按位AND(&):若两个输入位的值都为1,则结果为1,否则结果为0。按位OR(|):若两个输入位里至少有一个是1,则结果为1,只有在两个输入位都是0的情况下,它才会生成一个0。按位XOR(^,异或):若两个输入位值不同,那结果就是1。按位NOT(-,也叫做”非”运算符):属于一元运算符,若输入0,则结果是1,若输入1,则结果是0。
值得注意的是,因为布尔(boolean)类型值占一位,true为1,false为0,所以布尔类型也可以进行按位AND、OR和XOR,但是不能进行按位NOT(大概是为了避免与逻辑NOT混淆)。按位运算符在进行布尔类型运算时与逻辑运算符有相同过的效果,只不过不会短路。
五、移位运算符
移位运算符面向的运算对象是二进制的”位“,所以应先将数值转换成二进制再进行运算。
1. 左移位运算符(<<)能将运算符左边的运算对象向左移动运算符指定的位数(在低位补0)。右移运算符分为两种:有符号右移(>>)和无符号右移(>>>)。”有符号“右移,若值为正,则在高位补0,若值为负,则在高位补1。”无符号“右移,无论值正负,都在高位补0。
2. char、byte和short在进行移位操作之前,都会将值自动转换成int,再进行移位操作。因为有个转换过程,所以移位后的值可能不是正确的结果。比如下面这个例子:
short s = -1; s >>>= 10; System.out.println(s); //输出-1
short类型在移位之前先自动转换成int类型,负数在内存中都是以补码的形式存在,所以-1在内存中的表示是1111 1111 1111 1111 1111 1111 1111 1111 ,在无符号移10位后变成0000 0000 0011 1111 1111 1111 1111 1111,因为short类型只占2个字节,16位,所以取移位后的低16位,还是1111 1111 1111 1111,所以结果就为-1。
3. int类型只占32位,那如果我们移动的位数超过了32,值不就永远都变成了0或者1,这显然是不对的。所以java做了规范,为了防止我们在一个int数里移动不切实际的数字,只有右侧的5个低位有效。这句话的意思是,我们先将移位数转换成二进制,然后再取二进制右侧的5个低位,这样移位的数就永远不会超过了32。比如-1 >>>= 34,34超过了32,34的二进制是00100010,取5个低位时00010,十进制的2,所以-1 >>>= 34等于-1 >>>= 2
int i = 1; i <<= 34; System.out.println(i); //4 int i2 = 1; i2 <<= 2; System.out.println(i2); //4
4. 左移一位相当乘以2,右移一位相当除以2,移位是最快的2的指数运算。
5. 利用移位和位运算将int类型的整数转换成二进制,我觉得是最快的方式
static void pBinInt(int i){ for(int j = 31; j >= 0 ; j--){ if(((1 << j) & i) != 0){ System.out.print(1); }else{ System.out.print(0); } } }
六、三元if-else运算符
表达式采取下述形式:布尔表达式?值0:值1
若”布尔表达式“的结果为true,则计算”值0“,而且它的结果成为最终由运算符产生的值。但若”布尔表达式“的结果为false,计算的就是”值1“,且它的结果成为最终由运算符产生的值。
其实这个运算符就是if-else的简写,效果等同于下面的语句
if(布尔表达式){ 值0; }else{ 值1; }
以上是关于linux小数点会自动进位吗的主要内容,如果未能解决你的问题,请参考以下文章