Komentarz katalog wpisów zbitki WBI

O Nowym Roku informatycznie

data wpisu: 2020.01.01 | data publikacji: 2019.12.31

Wszystkiego dobrego w Nowym 3744 oraz 7E4 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 2020 w zapisie ósemkowym oraz szesnastkowym (heksadecymalnym). Ale też trzeba przyznać, ze ten Nowy rok dobrze się prezentuje w zapisie dziesiętnym 2020. Następny taki będzie w roku 2121.

Dla mniej wtajemniczych w przykład pokazujący zasadę tego zapisu:

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

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

zapis liczby 7E416 o podstawie szesnastkowej:
7*162 +14*161 +4*160 =202010

Teraz popatrzmy w przyszłość na Sylwestra roku 204710 czyli 37778 lub 7FF16.

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

11:59    204710      3777     7FF16
12:00    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 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 2019 roku na 1022710 dni przed Sylwestrem 2047 roku nie powinniśmy się tym ciekawym problemem martwić, ale się dobrze bawić.

Ps. Przyznaję się, że jest to mutacja wpisu z zeszłego roku, ale jakże ciekawa.