Ответ
Старшие биты (High-order bits) — это биты в двоичном представлении числа, которые имеют наибольший вес (значимость). Они находятся слева. Самый левый бит называется MSB (Most Significant Bit — самый значимый бит).
Младшие биты (Low-order bits) — это биты с наименьшим весом. Они находятся справа. Самый правый бит называется LSB (Least Significant Bit — наименее значимый бит).
Пример для 8-битного числа 0b11001010 (202):
11001010
↑ ↑
MSB LSB
- Старший бит (MSB) —
1. В знаковых числах (signed) он определяет знак (0— положительное,1— отрицательное). - Младший бит (LSB) —
0. Его значение определяет, является ли число чётным (0) или нечётным (1).
Пример в Go:
package main
import "fmt"
func main() {
num := uint8(0b11001010) // 202
// Получаем MSB с помощью сдвига вправо на 7 позиций
msb := num >> 7
// Получаем LSB с помощью побитового "И" с 1
lsb := num & 1
fmt.Printf("Число: %d (%08b)n", num, num)
fmt.Printf("Самый значимый бит (MSB): %dn", msb) // Выведет: 1
fmt.Printf("Наименее значимый бит (LSB): %dn", lsb) // Выведет: 0
}
Практическое применение:
- MSB: Определение знака числа, старшие байты в сетевых протоколах (Big Endian/Little Endian).
- LSB: Проверка на чётность, использование в качестве флагов, криптография, генераторы псевдослучайных чисел.
Ответ 18+ 🔞
Давай разжую эту тему про биты, а то некоторые думают, что это что-то про гитару. Старшие биты — это, грубо говоря, самые важные увальни в этом двоичном царстве. Сидят себе слева, надувают щёки, потому что вес у них овердохуища. Самый главный левый выскочка зовётся MSB — Most Significant Bit, или, по-нашему, самый значимый бит.
А младшие биты — это, соответственно, пиздюки справа, с наименьшей значимостью. Самый правый скромняга — LSB (Least Significant Bit), наименее значимый бит.
Смотри, вот тебе число 0b11001010 (это 202, если что):
11001010
↑ ↑
MSB LSB
- MSB (старший) — тут
1. В знаковых числах этот товарищ отвечает за знак:0— всё пучком, число положительное,1— всё, пиздец, минус. - LSB (младший) — а это
0. По нему, как по гороскопу, можно узнать чётность:0— чётное,1— нечётное. Всё просто, как три копейки.
А вот как это в Go поковырять:
package main
import "fmt"
func main() {
num := uint8(0b11001010) // 202
// Выковыриваем MSB — сдвигаем всё нахуй вправо на 7 позиций, чтоб он один остался
msb := num >> 7
// Выковыриваем LSB — делаем побитовое "И" с единицей, всё остальное обнуляется
lsb := num & 1
fmt.Printf("Число: %d (%08b)n", num, num)
fmt.Printf("Самый значимый бит (MSB): %dn", msb) // Выведет: 1
fmt.Printf("Наименее значимый бит (LSB): %dn", lsb) // Выведет: 0
}
А где это, блядь, применяется?
- MSB: Знак числа определяет, сетевые порядки байт (Big/Little Endian) — там вообще отдельная песня, в рот меня чих-пых.
- LSB: Чётность проверить, флаги какие-нибудь похачить, в криптографии покопаться или псевдослучайные числа нагенерить. В общем, мелочь, а приятно.