sortset -i变量的范围是多少

时间:2013-11-29 11:53:16

标签: shell

以下是我的剧本

#!/bin/sh

typeset resl=$(($1+$2))
echo $resl

当我将两个值 173591451 2000252844 传递给shell脚本时,它返回负值。

./ addvalue.sh 173591451 2000252844

输出--->的 -2121123001

请告诉我们如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

放入友好的编程计算器应用程序以十六进制查看您的值我看到您的精度为32位。一旦你达到32位(第8位> = 8),你已经超过了你的shell编译的整数大小,并进入负数的土地(但这是另一篇文章)。

   0x81923B47 = 0xA58CB9B + 0x77396FAC

两个解决方法,无需担心获得64位shell,请遵循。

1。 AWK

这取决于你编译awk的方式以及你使用的awk。

awk 'END {print 173591451 + 2000252844}' </dev/null

还要在awk中进行所有关系测试。

2。直流
“dc”程序(桌面计算器)使用任意精度,因此您再也不用担心整数位大小了。把它放到一个变量中:

   $ sum="$( echo 173591451 2000252844 + p | dc )"; echo $sum
2173844295

避免typeset -i dc ,因为shell需要查看字符串。正确检查关系(如果$a < $b)有点棘手,但可以完成($a -lt $b是错误的。)