Uzyskiwanie chmodu w C

0

Witam, mam problem ze zrozumiem działania kodu:

  int statchmod = sb->st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);

Wiem co on robi, tzn. mając w

 sb->st_mode 

wartość maski 100600 (w systemie ósemkowym) i robiąc logicznego anda z tymi wartościami bitowymi dostaję chmod w postaci np. 600. Probowalem to rozpisac na kartce zeby to zrozumiec ale nie bardzo mi idzie. Np przy tych alternatywach kolejnosc chyba nie ma znaczenia? Probowalem skonwertowac sb->st_mode na binarny a potem go zandowac z tym co zostanie z tych alternatyw ale wychodzi inaczej

1

Interesują cię ostatnie trzy cyfry w systemie ósemkowym
Każdą z trzech cyfr WSZYSCY GRUPA JA rozpatrujesz osobno, na zasadzie:
EXEC=1
READ=2
WRITE=4
Np:
6=4+2=WRITE+READ

0

Nom to rozumiem i co dalej.

0

Dlaczego nie biore pierwszej jedynki z maski pod uwage? W koncu ja tez anduje.

0

Czy ty rozumiesz jak działa operator AND? Wątpię. Przykład:
1101 & 1 = 1 i to jest to samo co 1101 & 0001 = 0001
1101 & 11 = 1 i to jest to samo co 1101 & 0011 = 0001
1101 & 111 = 1 i to jest to samo co 1101 & 0111 = 0101
1101 & 1111 = 1 i to jest to samo co 1101 & 1111 = 1101

AND zwraca 1 tylko jeśli wszystkie bity są ustawione na 1. Jeśli któryś z parametrów ma "mniej" bitów to dopełnia się je 0. Więc

100600 & 600 = 100600 & 000600 = 000600 = 600

0

Wiem jak działa AND. Trochę się źle wyraziłem, bardziej chodzi mi o to jaką rolę pełni ta jedynka z przodu

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