Komentarz katalog wpisów zbitki WBI

O Nowym Roku informatycznie

data wpisu: 2019.01.01 | data publikacji: 2018.12.31

Wszystkiego dobrego w Nowym 3743 oraz 7E3 Roku.

ZAPIS
  16    10    2  
0 00 0000
1 01 0001
2 02 0010
3 03 0011
4 04 0100
5 05 0101
6 06 0110
7 07 0111
8 08 1000
9 09 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111

Pewnie wielu się zdziwi, ale bardziej zaawansowani informatycznie stwierdzą – a to informatyczny żartowniś – przecież to rok 2019 w zapisie ósemkowym oraz szesnastkowym (heksadecymalnym).

Czasem sobie pozwalam na podobne żarty i często nawet informatycy wyrażali zdziwienie, co to za dziwna liczba 46 opisująca 70 lat polskiej informatyki.

Przykład pokazujący zasadę tego zapisu:

zapis liczby 37438 o podstawie ósemkowej:
3*83 +7*82 +4*81 +3*80 = 201910

zapis liczby 201910 o podstawie dziesiętnej:
2*103 +0*102 +1*101 +9*100 = 201910

zapis liczby 7E316 o podstawie szesnastkowej:
7*162 +14*161 +3*160 =201910

Teraz popatrzmy w przyszłość, bo jak Ministerstwo Inwestycji i Rozwoju pisze strategię Polska 2050, to my możemy spojrzeć na Sylwestra roku 2047 – w zapisie ósemkowym 3777 a szesnastkowym 3FF.

Co się pokaże na tych licznikach o godzinie 23:59, 24:00 albo 00:00, 00:01 ?

204710      3777     7FF16
204810      4000     80016

[Uwaga: Zadałem sobie pytanie, który mamy rok w chwili wybicia godziny 12:00 w noc sylwestrową - stary czy już nowy?  Okazuje się, że ta pełna godzina 24:00, pokazywana na zegarkach cyfrowych jako 00:00 jest jeszcze północą dnia dotychczasowego, a więc również dnia starego roku, ale też jest ona północą nowego dnia, czyli dnia nowego roku. Czyli przez moment mamy i Stary i Nowy Rok?  Chyba jednak pierwsze uderzenie zegara należy do Starego Roku, a następne już wykonywane w kolejnych sekundach nowego dnia należą do Nowego Roku. I tego powinniśmy się trzymać otwierając szampana!] 

 

Ach, jakie to ładne liczby – 2048, 4000 i 800.

Ale w rejestrach i słowach pamięci komputera są one zapisywane o podstawie dwójkowej, binarnie, zerojedynkowo, przy czym bardzo łatwo uzyskać taki zapis z postaci ósemkowej oraz szestnastkowej:

 0  7  F  F
 0  0  3  7  7  7
 0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  1
po dodaniu do tego rejestru 1 otrzymamy:
 0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0

czyli zapis roku 2048 !

Czy coś nam grozi z tego powodu?

W zasadzie nie, chyba że jakiś żartowniś z racji tak pięknej informatycznie zmiany roku dopisze kod jakiś mniej lub bardziej złośliwie oznajmujący ten niecodzienny osobliwy informatycznie fakt. Bo przecież na naszej osi czasu podobna sytuacja mogła się zdarzyć w Sylwestra 1023 roku (wtedy nie było komputerów) i może się zdarzyć dopiero w 4097 roku – a więc poza naszym pobytem na tym świecie. Również w kalendarzu hebrajskim, gdy mamy dzisiaj 5779 rok oraz muzułmańskim gdy mamy 1440 rok nie  ma takich szans.

Ale, ale – problem może stać się poważny, gdyby komputer wykorzystywał słowa 12-bitowe, a nie jak obecnie co najmniej 16-bitowe do zapisu roku w postaci liczby całkowitej. Takich komputerów – np. PDP-8, PDP-12, CDC6000 używaliśmy do połowy lat 90-tych. Jednakże możemy mieć problem ze sterownikami (aktywnymi elementami internetu rzeczy), z których wiele korzysta ze słów 12-bitowych w przetwarzaniu i sterowaniu sygnałami. Dlaczego?

Popatrzmy,  że przy słowach 12-bitowych deklaracje typów i zmiennych np. w języku C: opisują:

short integer numer_roku ;
- może zawierać liczby całkowite od -212 do 212-1 czyli z przedziału  -2048..2047 co oznacza, że nie można w niej zapisać liczby większej od 2047, a więc również roku 2048.

Można to poprawić deklarując:

unsigned short integer numer_roku;
moze zawierać liczby naturalne od 0..4095, a więc również rok 2048 (ale nie wystarczy to do zapisania roku według kalendarza hebrajskiego – trzeba wtedy zadeklarować unsigned integer numer_roku_hebrajski; co zajmie dwa słowa 12-bitowe ).

Trochę przypomina to problem roku 2000, ale tylko w odniesieniu do nieznanej liczby 12-bitowych sterowników (można je zakupić również dzisiaj i używać w instalacjach internetu rzeczy) i to wtedy, gdy programiści nie zauważyli tych ograniczeń w przyszłości i może to mieć znaczenie dla poprawnego funkcjonowania sterownika.

Ale dzisiaj w Sylwestra 2018 roku na 296016 dni (ups – przepraszam 1059210 dni) przed Sylwestrem 2047 roku nie powinniśmy się tym ciekawym problemem martwić, ale się dobrze bawić.

I na koniec, nieco znudzonym zabawą sylwestrową polecam grę w 2048 ( http://2048game.com/variations/ ) poprawiającą wiedzę na wartości poszczególnych bitów słowa 12-bitowego, ale też ostrzegam, że początkowo jest trudna do wygrania, przez to bardzo wciąga.