【问题标题】:How can hex addition in BC be made to overflow at the 8 byte limit (uint64)?如何使 BC 中的十六进制加法在 8 字节限制(uint64)处溢出?
【发布时间】:2011-05-15 10:31:39
【问题描述】:

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

正如测试脚本所示,将 1 添加到边界值(FF、FFFF 等)只会继续增加总数。毫无疑问,这是一个功能,但对于这个特定的实例,我想将其限制为 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

【问题讨论】:

    标签: bash bc


    【解决方案1】:

    这称为模数,您可以在此处阅读 https://superuser.com/questions/31445/gnu-bc-modulo-with-scale-other-than-0 关于模数和 bc 的信息。

    【讨论】:

    • 啊..谢谢...我专注于并期望它是一个'bc'设置,如BC_LINE_LENGTH=nnnscale或类似的东西......我'从来没有想过以这种方式取模......即。它有效地截断了高阶端..我只认为它是“永远存在”商的剩余部分......好吧,整洁......所以我只需要在每次加法后做一个模数... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2018-06-06
    相关资源
    最近更新 更多