J'ajoute une série de 8196 entiers non signés 64 bits, et j'ai besoin que le total cumulé passe à zéro et continue à compter à partir de là ... tout comme un langage de programmation "normal" ferait à le plafond INT_MAX correspondant. Comme le montre le script de test, l'ajout de 1 à une valeur limite (FF, FFFF, etc.) ne cesse d'augmenter le total. Une fonctionnalité, sans doute, mais je voudrais limiter à 64 bits pour cette instance particulière ..Comment peut-on faire déborder l'addition hexadécimale en BC à la limite de 8 octets (uint64)?
Y at-il un moyen de limiter bc
dans ce cas?
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
Ah .. merci ... Je me concentrais sur, et je m'attendais à ce que ce soit, un paramètre 'bc', comme 'BC_LINE_LENGTH = nnn' ou' scale' ou quelque chose de ce genre ... et je n'ai jamais vraiment pensé d'un modulo de cette façon ... ie. qu'elle tronque effectivement la fin de l'ordre élevé. Je n'y ai jamais pensé que comme le reste d'un quotient «toujours présent» ... D'accord, net ... donc j'ai juste besoin de faire un modulo après chaque ajout ... :) –