Что такое старшие (high-order) и младшие (low-order) биты? В чем их разница?

Ответ

Старшие биты (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: Чётность проверить, флаги какие-нибудь похачить, в криптографии покопаться или псевдослучайные числа нагенерить. В общем, мелочь, а приятно.