Представление дополнения 2 для n
-битных целых чисел фактически является соглашением, что целое число без знака b, равное или большее Math.pow(2,n-1)
, не представляет сохраненное значение, а вместо этого значение b-(Math.pow(2,n-1)+1)
, которое является отрицательным , Поскольку компьютеры теперь выполняют арифметику обтекания c (то есть a+b
фактически вычисляет (a+b) % Math.pow(2, n)
, basi c арифметика c дает правильный результат в этом соглашении.
Если вы теперь go для BigIntegers Вы хотите этого избежать. Вам не нужно максимальное целочисленное значение Math.pow(2,n-1)-1
, выше которого числа внезапно становятся отрицательными. И вам не нужно переносить арифметику c, вам нужна действительная целочисленная арифматика c. Дополняющие представления двух связаны с указанным диапазоном c доступных целых чисел.
Большие целые числа хранятся в строке «цифр», где цифры над самой старшей, как говорят, равны нулю. Теоретически вы можете найти некоторые творческий способ хранения целых чисел, определяя, что все биты выше самого старшего сохраненного бита должны быть равны самому верхнему сохраненному биту и что все отрицательные числа -b
затем сохраняются как Infinity-b
или что-то еще, но это сильно усложнит ситуацию во многих отношениях Таким образом, гораздо проще использовать хранилище знаков и величин, даже если оно может Мне нужно немного больше памяти.