Suma bitowa

0

Tak mnie zawsze zastanawiało skąd program wie że jak mamy powiedzmy (wklejam losowy kawałek kodu)
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
No i każdy z nich reprezentuje jakąś wartość którą możemy zapisać w postaci dziesiętnej (np WS_OVERLAPPED == 0)
No i sumując bitowo dwie liczby np 34 i 23

dec bin
34 00100010
23 00010111
34 | 23 (= 55) 00110111
Skąd wiadomo, że gdy mamy już tą sumę 110111 to że jest to sumą bitową 100010 i 10111 a nie np 110111 i 100101
Czy np WindowStyles są dobrane tak by nie było takiej sytuacji, że coś się powtarza i np z 55 jasno wynika że jest to sumą bitową 34 i 23?

2

bo WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU i inne tego typu stałe mają w reprezentacji bitowej tylko jeden bit równy 1, stąd suma bitowa jednoznacznie okresla jakie wartosci się na nią składają

0

Flagom nadaje się potęgi dwójki czyli np. 1,2,4,8,16 czyli mamy odpowiednio

00001
00010
00100
01000
10000
2

A czasami zdarza się że to nie ma znaczenia. Na przykład:

szczeka ---------------\
smakuje jak kurczak -\ |
jest ptakiem ------\ | |
latanie ---------\ | | |
pływanie ------\ | | | |
chodzenie ---\ | | | | |
             | | | | | |
kurczak      1 0 0 1 1 0
kaczka       1 1 1 1 1 0
pies         1 1 0 0 1 1
karp         0 1 0 0 0 0
wróbel       1 0 1 1 0 0
rybowróbel   1 1 1 1 0 0 = wróbel | karp
0

Ja dodam, że to nie jest wcale zależne od zapisu dwójkowego: jeśli masz składowe 2, 4, 8 i 16, to liczbę 20 możesz rozłożyć na nie tylko na jeden sposób (bez powtarzania).

Mozesz też mieć flagi o wartościach 3, 9, 21, 63 z czego każda występuje w postaci „wcale” (brak wartości) „trochę” (wartość flagi razy 1) i „bardzo” (wartość flagi razy 2).
Liczbę 57 można wtedy rozłożyć tylko na jeden sposób: bardzo 3, trochę 9, bardzo 21, wcale 63 (3*2 + 9*1 + 21*2 + 63*0).

W systemie dziesiętnym czasami zapisuje się datę w postaci jednej liczby, np. dzisiaj to 20120201. To jest „dwadzieścia milionów sto dwadzieścia tysięcy dwieście jeden”, ale ponieważ każda składowa jest na innych cyfrach, nigdy nie będzie między nimi konfliktu (20120000 + 200 + 1)

PS. jeśli ktoś nie zauważył, flagi 2/4/8 tworzą system dwójkowy, 3/9/21 trójkowy, a data – system o podstawie 100.

1 użytkowników online, w tym zalogowanych: 0, gości: 1