Форум программистов, компьютерный форум CyberForum.ru

Boolean - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
12.02.2011, 22:30     Boolean #1
Не подскажите почему булеану выделяется 1 байт(8 бит) ведь достаточно только одного бита. И как тогда работать побитово?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2011, 22:30     Boolean
Посмотрите здесь:

Pascal Boolean
C++ на C++, Boolean
Turbo Pascal Boolean
C++ Перебор числа в 2ичной системе, используя boolean
boolean Java SE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
slavich
12 / 12 / 1
Регистрация: 25.10.2009
Сообщений: 32
12.02.2011, 23:32     Boolean #2
выделяется байт, т.к. с ним проще работать.Побитово можно работать с помощью операций &,|,^.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.02.2011, 00:44     Boolean #3
Я бы уточнил - доступ ко всему байту происходит быстрее, поскольку чтобы произвести доступ к биту, надо его сначала из байта выделить из бита (т.е. если бы всё это делалось автоматически, то программист бы этого не замечал, но эти дополнительные операции всё равно производились бы).
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
14.02.2011, 19:26  [ТС]     Boolean #4
И все же можно ли как то работать с битами на с++?(Если можно то как)
Всмысле хранить там информацию(например создать булеву матрицу побитово)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.02.2011, 19:28     Boolean #5
shocoladka, читайте про операции побитового сдвига (<<, >>)
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
14.02.2011, 19:43     Boolean #6
Цитата Сообщение от shocoladka Посмотреть сообщение
И все же можно ли как то работать с битами на с++?(Если можно то как)
Всмысле хранить там информацию(например создать булеву матрицу побитово)
std::vector<bool> хранит побитово, но его не очень рекомендуют использовать. Можно воспользоваться std::bitset (тоже побитово хранит).
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.02.2011, 20:35     Boolean #7
вот ещё пример работы с битами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
enum Status { STILL_ALIVE = 0, BULLET_IN_THE_HEAD = 1, KNIFE_IN_THE_HEART = 2, POISON_IN_THE_STOMACH = 4 };
 
struct Person {
    std::string name;
    int status;
    Person(std::string n, int s): name(n), status(s){}
};
 
int main(){
    Person p("Vasya", STILL_ALIVE);
    
    p.status |= BULLET_IN_THE_HEAD | POISON_IN_THE_STOMACH;
    
    if ( p.status == STILL_ALIVE ){
        std::cout << p.name << " is still alive." << std::endl;
    }
    else {
        std::cout << p.name << " have ";
        if ( p.status & BULLET_IN_THE_HEAD )
            std::cout << "bullet in the head ";
        if ( p.status & KNIFE_IN_THE_HEART )
            std::cout << "knife in the heart ";
        if ( p.status & POISON_IN_THE_STOMACH )
            std::cout << "poison in the stomach ";
        std::cout << "\b. Because of it " << p.name << " is dead." << std::endl;
    }
    
    return 0; 
}
мрачновато, правда, как-то получилось...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2011, 20:35     Boolean
Еще ссылки по теме:

Boolean Java SE
C++ Свой тип Boolean
Java SE Boolean cannot be dereferenced

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71
16.02.2011, 20:35  [ТС]     Boolean #8
Цитата Сообщение от easybudda Посмотреть сообщение
вот ещё пример работы с битами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
enum Status { STILL_ALIVE = 0, BULLET_IN_THE_HEAD = 1, KNIFE_IN_THE_HEART = 2, POISON_IN_THE_STOMACH = 4 };
 
struct Person {
    std::string name;
    int status;
    Person(std::string n, int s): name(n), status(s){}
};
 
int main(){
    Person p("Vasya", STILL_ALIVE);
    
    p.status |= BULLET_IN_THE_HEAD | POISON_IN_THE_STOMACH;
    
    if ( p.status == STILL_ALIVE ){
        std::cout << p.name << " is still alive." << std::endl;
    }
    else {
        std::cout << p.name << " have ";
        if ( p.status & BULLET_IN_THE_HEAD )
            std::cout << "bullet in the head ";
        if ( p.status & KNIFE_IN_THE_HEART )
            std::cout << "knife in the heart ";
        if ( p.status & POISON_IN_THE_STOMACH )
            std::cout << "poison in the stomach ";
        std::cout << "\b. Because of it " << p.name << " is dead." << std::endl;
    }
    
    return 0; 
}
мрачновато, правда, как-то получилось...
Ну это конечно не совсем то что мне надо было)

Добавлено через 22 часа 36 минут
А вы не подскажите почему когда я изменяю значение STILL_ALIVE результат работы программы изменяется??
Yandex
Объявления
16.02.2011, 20:35     Boolean
Ответ Создать тему
Опции темы

Текущее время: 22:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru