Хорошо, это зависит от размера целого числа, порядкового номера и от того, хотите ли вы, чтобы самый левый бит находился в зависимости от ориентации в памяти или самого старшего бита.
Предполагая, что вам нужен старший значащий бит, который на 32-битной машине с прямым порядком байтов (наиболее распространенный тип) будет находиться в четвертом байте из местоположения int
s в памяти .:
i & 0x80000000
Теперь регистр является логическим для присутствия бита MSB.
Может быть возможно сдвинуть бит вправо, это может генерировать меньше объектного кода:
i >> (sizeof(i) * CHAR_BIT - 1)
Update0
Может быть, некоторые не знают, что я имею в виду выше. На примере архитектуры, которую я привел, вы также можете сделать это:
((unsigned char *)&i)[3] >> 7
((unsigned char *)&i)[3] & 0x80