LINUX.ORG.RU

Что значит [ $(( capabilities >> 2 & 1 )) -eq 1 ]?

 


0

1

С 2251 строки (https://github.com/speed47/spectre-meltdown-checker/blob/master/spectre-meltd...):

[ $(( capabilities >> 0 & 1 )) -eq 1 ] && capabilities_rdcl_no=1
[ $(( capabilities >> 1 & 1 )) -eq 1 ] && capabilities_ibrs_all=1
[ $(( capabilities >> 2 & 1 )) -eq 1 ] && capabilities_rsba=1
[ $(( capabilities >> 3 & 1 )) -eq 1 ] && capabilities_l1dflush_no=1
[ $(( capabilities >> 4 & 1 )) -eq 1 ] && capabilities_ssb_no=1

Как понимать конструкцию «capabilities >> 3 & 1»?

Спасибо.

★★★

'>>' - битовый сдвиг вправо

'&' - побитовое И

«[ $(( capabilities >> 2 & 1 )) -eq 1 ]» == «если бит номер 2 (считается с 0) равен 1»

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Как понимать конструкцию «capabilities >> 3 & 1»?

А вообще, это извращение, ибо на самом деле и быстрее (по крайней мере на bash) и нагляднее выполнялся бы такой код:

[ $(( capabilities & 1 )) -ne 0 ] && capabilities_rdcl_no=1
[ $(( capabilities & 2 )) -ne 0 ] && capabilities_ibrs_all=1
[ $(( capabilities & 4 )) -ne 0 ] && capabilities_rsba=1
...
Но если лень вырисовывать степени двойки, то обычно рисуют так (а не как в исходном извращении):
[ $(( capabilities & (1<<0) )) -ne 0 ] && capabilities_rdcl_no=1
[ $(( capabilities & (1<<1) )) -ne 0 ] && capabilities_ibrs_all=1
[ $(( capabilities & (1<<2) )) -ne 0 ] && capabilities_rsba=1
...

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.