1.Где мне могут понадобится битовые операции (си) ? Зачем нужен |, если есть &? Можете привести ссылку на какую нибудь задачу? ума не приложу где они могут понадобится... .
2.Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Другие языки программирования и технологии
Битовые операции
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("\nColor RGB: %x", getrgb);
        _getch();
        return 0;
    }
Так же смотри битовые поля, там эти операции употребляются.
//Получение диапазонов цветов 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("\nColor RGB: %x", getrgb);
        _getch();
        return 0;
    }
Так же смотри битовые поля, там эти операции употребляются.
>Где мне могут понадобится битовые операции (си) ?
Везде, где используются битовые маски и флаги.
>Зачем нужен |, если есть &?
То есть как? Это не взаимозаменимые операнды.
>Можете привести ссылку на какую нибудь задачу?
Возведение 2 в произвольную целую степень.
>ума не приложу где они могут понадобится.. .
Это от отсутствия опыта. .
>Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Можно, пример - та самая битовая маска.
Везде, где используются битовые маски и флаги.
>Зачем нужен |, если есть &?
То есть как? Это не взаимозаменимые операнды.
>Можете привести ссылку на какую нибудь задачу?
Возведение 2 в произвольную целую степень.
>ума не приложу где они могут понадобится.. .
Это от отсутствия опыта. .
>Можно ли упаковать несколько маленьких переменных (напр. по 2) в один байт?
Можно, пример - та самая битовая маска.
> Можно ли упаковать несколько маленьких переменных (напр. по 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\n", pack.a, pack.b, pack.c);
return 0;
}
Структура: 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\n", pack.a, pack.b, pack.c);
return 0;
}
1. Погугли. | - сложение соответствующих разрядов, & - умножение.
2. По мне - бред.
2. По мне - бред.
2. Нельзя упаковать несколько переменных в 1 байт. Пусть целочисленная переменная "заняла" n бит и пусть n < 8. Тогда максимальное значение этой переменной не превысит 2^n. На самом деле, эта переменная заняла 1 байт. Это можно проверить операцией sizeof.
Похожие вопросы
- Прогреи помагите с++. Для чего нужны Битовые операции. Заранее спасибо.
- C++. Битовое поле.
- битовые карты: так ли я понял тему, для чего вообще используются?
- Время выполнения операций, оценка...? С++
- Почему в матлабе операции + - * и / производятся за одинаковое время?
- Операции new и delete. Операции new и delete нужна теори про данные операции.
- Помогите, проблемма с операцией "или" \!\!
- За сколько тактов выполняются основные арифметические операции на современных компьютерах?
- Программу возведения числа в четвертую степень за 2 операции Pascal
- Как осуществить операцию сложения в с++ без операции присваивания ? int a=5; int b=6; int c=a+b; ( без "= ")