BC中的十六进制加法如何在8字节限制(uint64)上溢出?

时间:2011-05-15 10:31:40

标签: bash bc

我正在添加一系列8196 64位无符号整数,我需要将running-total“翻转”回零并继续从那里开始计数......就像“普通”编程语言一样在相关的INT_MAX上限。

正如测试脚本所示,向边界值(FF,FFFF等)添加1只会不断增加总数。毫无疑问,这是一个功能,但我想将此限制为64位这个特定实例。

有没有办法限制bc

unset f 
for ((i=0; i<8; i++)); do 
  f=${f}FF; echo -ne "$((${#f}/2)) bytes + 1      " 
  echo 'ibase=16; obase=10; ('$f'+1)' |bc 
done
echo "I want 8th+1 to = 0000000000000000"

# output
#
# 1 bytes + 1      100
# 2 bytes + 1      10000
# 3 bytes + 1      1000000
# 4 bytes + 1      100000000
# 5 bytes + 1      10000000000
# 6 bytes + 1      1000000000000
# 7 bytes + 1      100000000000000
# 8 bytes + 1      10000000000000000
# I want 8th+1 to = 0000000000000000

1 个答案:

答案 0 :(得分:1)

这称为模数,你可以在这里阅读https://superuser.com/questions/31445/gnu-bc-modulo-with-scale-other-than-0关于modulo和bc的内容。