битовые операции в си



Автор Артём Артемьев задал вопрос в разделе Другие языки и технологии

Битовые операции и получил лучший ответ

Ответ от Алекс Красс[гуру]
1) Мне один раз пришлось работать с & и | для перевода цветного изображения в черно-белое. Правда не на Си, но примерный код в Си будет выглядеть так:
//Получение диапазонов цветов RGB из 0xFFFFFF в (255,255,255) и обратно.
&nbsp&nbsp&nbsp&nbsp#include <stdio.h>
&nbsp&nbsp&nbsp&nbsp#include <conio.h>
&nbsp&nbsp&nbsp&nbspint main() {
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspint rgb = 0xFFAAEE, red, green, blue;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspred = (rgb&0xFF0000)>>16;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspgreen = (rgb&0x00FF00)>>8;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspblue = (rgb&0x0000FF);
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("Color Set: R %d,G %d,B %d",red,green,blue);
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspint getrgb = red<<16 | green<<8 | blue;
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspprintf("
Color RGB: %x", getrgb);
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp_getch();
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspreturn 0;
&nbsp&nbsp&nbsp&nbsp}
Так же смотри битовые поля, там эти операции употребляются.

Ответ от Jose Monteiro[гуру]
2. Нельзя упаковать несколько переменных в 1 байт. Пусть целочисленная переменная "заняла" n бит и пусть n < 8. Тогда максимальное значение этой переменной не превысит 2^n. На самом деле, эта переменная заняла 1 байт. Это можно проверить операцией sizeof.

Ответ от Ra[гуру]
> Можно ли упаковать несколько маленьких переменных (напр. по 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;
}

Ответ от Jurijus Zaksas[гуру]
>Где мне могут понадобится битовые операции (си) ?
Везде, где используются битовые маски и флаги.
>Зачем нужен |, если есть &?
То есть как? Это не взаимозаменимые операнды.
>Можете привести ссылку на какую нибудь задачу?
Возведение 2 в произвольную целую степень.
>ума не приложу где они могут понадобится.. .
Это от отсутствия опыта. .
>Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Можно, пример - та самая битовая маска.

Ответ от SkYneT[гуру]
1. Погугли. | - сложение соответствующих разрядов, & - умножение.
2. По мне - бред.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Битовые операции
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*