Автор Артём Артемьев задал вопрос в разделе Другие языки и технологии
Битовые операции и получил лучший ответ
Ответ от Алекс Красс[гуру]
1) Мне один раз пришлось работать с & и | для перевода цветного изображения в черно-белое. Правда не на Си, но примерный код в Си будет выглядеть так:
//Получение диапазонов цветов RGB из 0xFFFFFF в (255,255,255) и обратно.
    #include <stdio.h>
    #include <conio.h>
    int main() {
        int rgb = 0xFFAAEE, red, green, blue;
            red = (rgb&0xFF0000)>>16;
            green = (rgb&0x00FF00)>>8;
            blue = (rgb&0x0000FF);
        printf("Color Set: R %d,G %d,B %d",red,green,blue);
        int getrgb = red<<16 | green<<8 | blue;
        printf("
Color RGB: %x", getrgb);
        _getch();
        return 0;
    }
Так же смотри битовые поля, там эти операции употребляются.
2. Нельзя упаковать несколько переменных в 1 байт. Пусть целочисленная переменная "заняла" n бит и пусть n < 8. Тогда максимальное значение этой переменной не превысит 2^n. На самом деле, эта переменная заняла 1 байт. Это можно проверить операцией sizeof.
> Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Структура: a - 4 бита, b - 1, c - 3
#include <stdio.h>
int main() {
struct {
unsigned char a: 4;
unsigned char b: 1;
unsigned char c: 3;
} pack;
pack.a = 3;
pack.b = 1;
pack.c = 5;
pack.a++;
pack.b++;
pack.c++;
printf("a: %d, b: %d, c: %d
", pack.a, pack.b, pack.c);
return 0;
}
>Где мне могут понадобится битовые операции (си) ?
Везде, где используются битовые маски и флаги.
>Зачем нужен |, если есть &?
То есть как? Это не взаимозаменимые операнды.
>Можете привести ссылку на какую нибудь задачу?
Возведение 2 в произвольную целую степень.
>ума не приложу где они могут понадобится.. .
Это от отсутствия опыта. .
>Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Можно, пример - та самая битовая маска.
1. Погугли. | - сложение соответствующих разрядов, & - умножение.
2. По мне - бред.