java怎么计算一个整数长度(不含负数符号)? java 计算长式子有负号,无括号的问题

java\u600e\u6837\u6c42\u4e00\u4e2a\u6574\u6570\u7684\u957f\u5ea6\u554a\uff1f

public class Test
{
public static void main(String [] args)
{
int i=1,iNum = 1234567890;
while(iNum>9){
iNum/=10;
i++;
}
System.out.println("\u6570\u5b57\u7531" + i + "\u4f4d\u7ec4\u6210\u3002");
}
}

gstripe\u7684\u65b9\u6cd5\u662f\u9996\u9009
\u6211\u7ed9\u51fa\u53e6\u4e00\u79cd\u65b9\u6cd5

import java.util.Scanner; import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException; public class Kyo{ public static void main(String[] args) { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("js"); Scanner scan = new Scanner(System.in); while(true) { System.out.println("\u8f93\u5165\u4e00\u4e2a\u5f0f\u5b50\uff1a"); String jsonstr = scan.nextLine().trim(); try { double d = Double.parseDouble(se.eval("(" + jsonstr + ")").toString()); System.out.printf("%s=%.1f%n", jsonstr, d); } catch(ScriptException e) { System.err.println("\u8f93\u5165\u7684\u5f0f\u5b50\u4e0d\u5408\u6cd5\uff0c\u9000\u51fa\u7a0b\u5e8f"); scan.close(); break; } } }}

实现方法如下:
1 把这个数取绝对值
2 然后转成字符串,然后用length函数获取长度就行了。

Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
算数运算符
算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。
许多语言中的取模运算只能用于整数型,Java对此做了扩展,它允许对浮点数进行取模操作。例如,3%2 的结果是 1, 15.2%5 的结果是 0.2。取模操作还可以用于负数,结果的符号与第一个操作数的符号相同,例如,5%-3 的结果是 2,-5%3 的结果是-2。
此外,算术运算符还有“++”和“--”两种,分别称为加1和减1运算符。这两种运算符有前缀形式和后缀形式,含有有所不同。例如,i++ 和 ++i 的执行顺序是不一样的,i++ 在 i 使用之后再 +1,++i 在 i 使用之前先 +1。i-- 和 --i 的情况于此类似。
关系运算符
关系运算符用来比较两个值,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)6种。关系运算符都是二元运算符,也就是每个运算符都带有两个操作数,运算的结果是一个逻辑值。Java允许“==”和“!=”两种运算符用于任何数据类型。例如,既可以判断两个数的值是否相等,也可以判断对象或数组的实例是否相等。判断实例时比较的是两个对象在内存中的引用地址是否相等。
逻辑运算符
逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。前两个是二元运算符,后一个是一元运算符。Java对逻辑与和逻辑或提供“短路”功能,也就是在进行运算时,先计算运算符左侧的表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的计算,否则计算运算符右侧表达式,并得到整个表达式的值。
位运算符
位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)和无符号右移(>>>)。位运算符只能对整数型和字符型数据进行操作。
1. 取反(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;
即:对一个二进制数按位取反,即将0变1,1变0。
2. 按位与(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1,结果才为“1,否则为0。
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3 & 5的值得1。
3. 按位或(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3 | 5,即 0000 0011 | 0000 0101 = 0000 0111 因此,3 | 5的值得7。
4. 异或(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
5. 左移(<<)
运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。例如: 12345 << 1,则是将数字12345左移1位:
位移后十进制数值变成:24690,刚好是12345的二倍,所以有些人会用左位移运算符代替乘2的操作,但是这并不代表是真的就是乘以2,很多时候,我们可以这样使用,但是一定要知道,位移运算符很多时候可以代替乘2操作,但是这个并不代表两者是一样的。
思考一下:如果任意一个十进制的数左位移32位,右边补位32个0,十进制岂不是都是0了?当然不是!!! 当int 类型的数据进行左移的时候,当左移的位数大于等于32位的时候,位数会先求余数,然后再进行左移,也就是说,如果真的左移32位 12345 << 32 的时候,会先进行位数求余数,即为 12345<<(32%32) 相当于 12345<< 0 ,所以12345<< 33 的值和12345<<1 是一样的,都是 24690。
6. 右移(>>)
同样,还是以12345这个数值为例,12345右移1位: 12345>>1。
右移后得到的值为 6172 和int 类型的数据12345除以2取整所得的值一样,所以有些时候也会被用来替代除2操作。另外,对于超过32位的位移,和左移运算符一样,,会先进行位数求余数。
7. 无符号右移(>>>)
无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。以下是-12345二进制表示:
对于源码、反码、补码不熟悉的同学,请自行学习,这里就不再进行补充了讲解了,这里提醒一下,在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1,则应补1。
1、原码、反码和补码说明:一个数可以分成符号位(0正1负)+ 真值,原码是我们正常想法写出来的二进制。由于计算机只能做加法,负数用单纯的二进制原码书写会出错,于是大家发明了反码(正数不变,负数符号位不变,真值部分取反);再后来由于+0, -0的争端,于是改进反码,变成补码(正数不变,负数符号位不变,真值部分取反,然后+1)。二进制前面的0都可以省略,所以总结来说:计算机里的负数都是用补码(符号位1,真值部分取反+1)表示的。2、位运算符和2的关系位运算符和乘2、除2在大多数时候是很相似的,可以进行替代,同时效率也会高的多,但是两者切记不能混淆 ;很多时候有人会把两者的概念混淆,尤其是数据刚好是 2、4、6、8、100等偶数的时候,看起来就更相似了,但是对于奇数,如本文使用的12345 ,右移之后结果为6172 ,这个结果就和数学意义上的除以2不同了,不过对于int 类型的数据,除2 会对结果进行取整,所以结果也是6172 ,这就更有迷惑性了。
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可依此类推。
条件运算符
条件运算符( ? : )也称为 “三元运算符”或“三目运算符”。
语法形式:布尔表达式 ? 表达式1 :表达式2。
运算过程:如果布尔表达式的值为 true ,则返回 表达式1的值,否则返回 表达式2 的值。
运算符的优先次序
在对一个表达式进行计算时,如果表达式中含有多种运算符,则要安运算符的优先次序一次从高向低进行。运算符的优先次序如下:

Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
算数运算符
算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。
许多语言中的取模运算只能用于整数型,Java对此做了扩展,它允许对浮点数进行取模操作。例如,3%2 的结果是 1, 15.2%5 的结果是 0.2。取模操作还可以用于负数,结果的符号与第一个操作数的符号相同,例如,5%-3 的结果是 2,-5%3 的结果是-2。
此外,算术运算符还有“++”和“--”两种,分别称为加1和减1运算符。这两种运算符有前缀形式和后缀形式,含有有所不同。例如,i++ 和 ++i 的执行顺序是不一样的,i++ 在 i 使用之后再 +1,++i 在 i 使用之前先 +1。i-- 和 --i 的情况于此类似。
关系运算符
关系运算符用来比较两个值,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)6种。关系运算符都是二元运算符,也就是每个运算符都带有两个操作数,运算的结果是一个逻辑值。Java允许“==”和“!=”两种运算符用于任何数据类型。例如,既可以判断两个数的值是否相等,也可以判断对象或数组的实例是否相等。判断实例时比较的是两个对象在内存中的引用地址是否相等。
逻辑运算符
逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。前两个是二元运算符,后一个是一元运算符。Java对逻辑与和逻辑或提供“短路”功能,也就是在进行运算时,先计算运算符左侧的表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的计算,否则计算运算符右侧表达式,并得到整个表达式的值。
位运算符
位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)和无符号右移(>>>)。位运算符只能对整数型和字符型数据进行操作。
1. 取反(~)
参加运算的一个数据,按二进制位进行“取反”运算。
运算规则:~1=0; ~0=1;
即:对一个二进制数按位取反,即将0变1,1变0。
2. 按位与(&)
参加运算的两个数据,按二进制位进行“与”运算。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1,结果才为“1,否则为0。
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3 & 5的值得1。
3. 按位或(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0 | 0=0; 0 | 1=1; 1 | 0=1; 1 | 1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3 | 5,即 0000 0011 | 0000 0101 = 0000 0111 因此,3 | 5的值得7。
4. 异或(^)
参加运算的两个数据,按二进制位进行“异或”运算。
运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
5. 左移(<<)
运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。例如: 12345 << 1,则是将数字12345左移1位:
位移后十进制数值变成:24690,刚好是12345的二倍,所以有些人会用左位移运算符代替乘2的操作,但是这并不代表是真的就是乘以2,很多时候,我们可以这样使用,但是一定要知道,位移运算符很多时候可以代替乘2操作,但是这个并不代表两者是一样的。
思考一下:如果任意一个十进制的数左位移32位,右边补位32个0,十进制岂不是都是0了?当然不是!!! 当int 类型的数据进行左移的时候,当左移的位数大于等于32位的时候,位数会先求余数,然后再进行左移,也就是说,如果真的左移32位 12345 << 32 的时候,会先进行位数求余数,即为 12345<<(32%32) 相当于 12345<< 0 ,所以12345<< 33 的值和12345<<1 是一样的,都是 24690。
6. 右移(>>)
同样,还是以12345这个数值为例,12345右移1位: 12345>>1。
右移后得到的值为 6172 和int 类型的数据12345除以2取整所得的值一样,所以有些时候也会被用来替代除2操作。另外,对于超过32位的位移,和左移运算符一样,,会先进行位数求余数。
7. 无符号右移(>>>)
无符号右移运算符和右移运算符是一样的,不过无符号右移运算符在右移的时候是补0的,而右移运算符是补符号位的。以下是-12345二进制表示:
对于源码、反码、补码不熟悉的同学,请自行学习,这里就不再进行补充了讲解了,这里提醒一下,在右移运算符中,右移后补0,是由于正数 12345 符号位为0 ,如果为1,则应补1。
1、原码、反码和补码说明:一个数可以分成符号位(0正1负)+ 真值,原码是我们正常想法写出来的二进制。由于计算机只能做加法,负数用单纯的二进制原码书写会出错,于是大家发明了反码(正数不变,负数符号位不变,真值部分取反);再后来由于+0, -0的争端,于是改进反码,变成补码(正数不变,负数符号位不变,真值部分取反,然后+1)。二进制前面的0都可以省略,所以总结来说:计算机里的负数都是用补码(符号位1,真值部分取反+1)表示的。2、位运算符和2的关系位运算符和乘2、除2在大多数时候是很相似的,可以进行替代,同时效率也会高的多,但是两者切记不能混淆 ;很多时候有人会把两者的概念混淆,尤其是数据刚好是 2、4、6、8、100等偶数的时候,看起来就更相似了,但是对于奇数,如本文使用的12345 ,右移之后结果为6172 ,这个结果就和数学意义上的除以2不同了,不过对于int 类型的数据,除2 会对结果进行取整,所以结果也是6172 ,这就更有迷惑性了。
赋值运算符
赋值运算符的作用就是将常量、变量或表达式的值赋给某一个变量。
除了“=”,其它的都是特殊的赋值运算符,以“+=”为例,x += 3就相当于x = x + 3,首先会进行加法运算x+3,再将运算结果赋值给变量x。-=、*=、/=、%=赋值运算符都可依此类推。
条件运算符
条件运算符( ? : )也称为 “三元运算符”或“三目运算符”。
语法形式:布尔表达式 ? 表达式1 :表达式2。
运算过程:如果布尔表达式的值为 true ,则返回 表达式1的值,否则返回 表达式2 的值。
运算符的优先次序
在对一个表达式进行计算时,如果表达式中含有多种运算符,则要安运算符的优先次序一次从高向低进行。运算符的优先次序如下:

  • java鎬庝箞璁$畻涓涓暣鏁伴暱搴(涓嶅惈璐熸暟绗﹀彿)?
    绛旓細1 鎶婅繖涓暟鍙栫粷瀵瑰 2 鐒跺悗杞垚瀛楃涓诧紝鐒跺悗鐢╨ength鍑芥暟鑾峰彇闀垮害灏辫浜嗐
  • java涓浣鐭ラ亾涓涓暣鍨鐨闀垮害?
    绛旓細鏁村瀷娌℃湁鐩存帴鑾峰緱闀垮害鐨勬柟娉曟瘮杈冪畝鍗曠殑鏂规硶int a=123456String sa=""+a; //鎶婃暟瀛楄浆鎴愬瓧绗︿覆int alen=sa.length(); 寰楀埌闀垮害 alen 灏辨槸a鐨勯暱搴﹀彲浠ョ敤int length=0;int b=1;fo(int n=1;n<300;n++){b=b*10;if(a/b==0){length=i;break;}}length 寰楀埌涔熸槸a鐨勯暱搴︽眰涓涓彲浠ヨ緭鍑轰竴涓...
  • java 鑾峰彇int绫诲瀷鏁版嵁闀垮害鐨勬柟娉?
    绛旓細璇ュ弬鏁板彲浠ユ槸鍩烘湰鏁版嵁绫诲瀷锛屽瓧绗︿覆锛圫tring锛夛紝绛夌瓑銆 杩欎釜鏂规硶鏄涓涓闈欐佹柟娉曘傝鏂规硶鍙互閲囧彇涓や釜鍙傛暟锛屽叾涓竴涓槸String锛屽彟涓涓槸鍩烘暟銆備娇鐢ㄨ鍙ワ細int numberOfDigits = String.valueOf(n).length()锛涖備簩銆佷娇鐢ㄥ鏁版柟娉曪細java.lang.StrictMath.log10() 鏂规硶杩斿洖浠10涓哄簳鐨勫鏁扮殑double鍊笺傚畠鍖...
  • java鎬庢牱姹備竴涓暣鏁鐨闀垮害鍟?
    绛旓細{ public static void main(String [] args){ int i=1,iNum = 1234567890;while(iNum>9){ iNum/=10;i++;} System.out.println("鏁板瓧鐢" + i + "浣嶇粍鎴愩");} } gstripe鐨勬柟娉曟槸棣栭 鎴戠粰鍑哄彟涓绉嶆柟娉
  • Java姹備竴涓暣鏁鐨勪綅鏁,鍦ㄧ嚎绛夌瓟妗堝弬鑰,鏂逛究鐨
    绛旓細public class Int_Length{ public static void main(String[] args) { int a=1111123123123; String.valueOf(a); System.out.println(a.length); } } 姹傞噰绾
  • java 鑷畾涔涓涓暣鏁,璁$畻瀹冩槸鍑犱綅鏁?
    绛旓細/ Title:杈撳叆涓涓0鍒99999涔嬮棿鐨勬暟锛屽垽鏂槸鍑犱綅鏁 / import java.io.*;public class bit { public static void main(String[] args)throws IOException { // bit bit = new bit();System.out.print("please input a number between(0-99999) ");BufferedReader reader=new BufferedReader...
  • 浠绘剰杈撳叆涓涓暣鏁(灏忎簬10浣),姹瀹冪殑浣嶆暟.(java璇█)
    绛旓細import java.io.*;public class test{ public static void main(String args[]) throws IOException{ InputStreamReader reader=new InputStreamReader(System.in);BufferedReader input = new BufferedReader(reader);String text=input.readLline();System.out.println("璇疯緭鍏涓涓暣鏁帮紙灏忎簬鍗佷綅锛夛細"...
  • 杈撳叆涓涓暣鏁,鍒嗗埆姹鍑哄叾涓綅,鍗佷綅鏁扮敤java鍐,绠鍗曡鑼冭阿璋
    绛旓細Scanner scanner=new Scanner(System.in);//璇诲彇杈撳叆娴乮nt num=scanner.nextInt();//杈撳叆涓涓暣鏁int gewei=num%10;int shuwei=num/10%10;System.out.println("鍚勪綅"+gewei);System.out.println("鍗佷綅"+shuwei);
  • JAVA瀹炵幇璇诲叆涓涓姝鏁存暟,杈撳嚭瀹冪殑浣嶆暟銆備緥濡:杈撳叆124,鍒欒緭鍑3?_鐧惧害鐭...
    绛旓細{ public static void main(string[]args){ string str = string.valueof(12345);stringbuffer buff = new stringbuffer();system.out.println(str);for(int i=str.length()-1;i>=0;i--){ buff.append(str.charat(i));} string retstr = buff.tostring();integer retint = integer....
  • java涓庝箞寰楀埌杈撳叆鐨涓涓鏁板瓧鏄嚑浣嶆暟
    绛旓細涓昏鎬濇兂璇风湅浠g爜鐨勭17琛岀殑while鏂规硶 濡傛灉n鐨勪釜浣嶆暟涓嶄负0鎴栬卬鐨勪釜浣嶆暟涓0浣嗛珮浣嶆暟涓嶄负0鍒欑敤count+1骞朵笖灏唍/10锛屽啀娆¤繘鍏ュ惊鐜紝鐩磋嚦n涓0銆俷涓0鏃跺嵆寰楀埌浣嶆暟count 浠g爜濡備笅锛氳繍琛岀粨鏋滐細
  • 扩展阅读:会c学java要多久 ... java判断数组长度 ... java获取数组长度的方法 ... java输入一个整数 ... 用java计算两数之和 ... java求int数组长度length ... java计算1到100奇数的和 ... java数组计算长度方法 ... java判断一个数是整数 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网