Для получения внутреннего представления беззнакового целого числа надо перевести число в двоичную систему счисления и дополнить полученный результат слева нулями до указанной разрядности.
При представлении со знаком самый старший (левый) разряд отводится под знак числа. Если число положительное, то в знаковый разряд помещается 0 , если число отрицательное - 1.
Предлагается хранить типы блоков в массиве. Каждый элемент - 2Б, количество элементов - 2^20 => всего требуется 2МБ.
При перезаписи блока и очередной переоценке необходимо учитывать типы данных в блоке до перезаписи (T0), после перезаписи (T1) и в соседних блоках (TL, TR).
Если T0 = T1, то количество кусков данных не изменяется, т.е. W[i+1] = W[i] TL = T0 = TR <> T1 -> W[i+1] = W[i] + 2 TL = T1 = TR <> T0 -> W[i+1] = W[i] - 2 TL = TR, T0 <> TL, T1 <> TL -> W[i+1] = W[i]
Если все четыре типа не совпадают, то W[i+1] = W[i] Если перезаписывается блок с адресом 0, считать, что тип TL не совпадает ни с одним из трех других.Аналогично при перезаписи блока с адресом , но для TR.
1. 01100011
2. 10111001
3. 1000000000011100
Объяснение:
Для получения внутреннего представления беззнакового целого числа надо перевести число в двоичную систему счисления и дополнить полученный результат слева нулями до указанной разрядности.
При представлении со знаком самый старший (левый) разряд отводится под знак числа. Если число положительное, то в знаковый разряд помещается 0 , если число отрицательное - 1.
1. 99 в 8-разрядной ячейке
99 / 2 = 49 + остаток 1
49 / 2 = 24 + остаток 1
24 / 2 = 12 + остаток 0
12 / 2 = 6 + остаток 0
6 / 2 = 3 + остаток 0
3 / 2 = 1 + остаток 1
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
99 в 10 СС = 1100011 в 2 СС
01100011
2. -57 в 8-разрядной ячейке
57 / 2 = 28 + остаток 1
28 / 2 = 14 + остаток 0
14 / 2 = 7 + остаток 0
7 / 2 = 3 + остаток 1
3 / 2 = 1 + остаток 1
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
57 в 10 СС = 111001 в 2 СС
10111001
3. -28 в 16-разрядной ячейке
28 / 2 = 14 + остаток 0
14 / 2 = 7 + остаток 0
7 / 2 = 3 + остаток 1
3 / 2 = 1 + остаток 1
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
28 в 10 СС = 11100 в 2 СС
1000000000011100
При перезаписи блока и очередной переоценке необходимо учитывать типы данных в блоке до перезаписи (T0), после перезаписи (T1) и в соседних блоках (TL, TR).
Если T0 = T1, то количество кусков данных не изменяется, т.е. W[i+1] = W[i]
TL = T0 = TR <> T1 -> W[i+1] = W[i] + 2
TL = T1 = TR <> T0 -> W[i+1] = W[i] - 2
TL = TR, T0 <> TL, T1 <> TL -> W[i+1] = W[i]
Далее рассмотрим случаи, когда TL <> TR
(TL = T0, TR = T1) или (TR = T0, TL = T1) -> W[i+1] = W[i]
(TL = T0, TR <> T1) или (TR = T0, TL <> T1) -> W[i+1] = W[i] + 1
(TL = T1, TR <> T0) или (TR = T1, TL <> T0) - > W[i+1] = W[i] - 1
Если все четыре типа не совпадают, то W[i+1] = W[i]
Если перезаписывается блок с адресом 0, считать, что тип TL не совпадает ни с одним из трех других.Аналогично при перезаписи блока с адресом , но для TR.
Вроде все?