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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
xDariuSx
10 / 10 / 1
Регистрация: 20.11.2012
Сообщений: 24
#1

Проверка бита - C++

08.09.2013, 23:53. Просмотров 2484. Ответов 3
Метки нет (Все метки)

Всем привет. Хотел спросить знающих людей, как можно проверить бит в байте. То есть, допустим, есть unsigned char "01010101". Какими быстрыми способами можно проверить второй бит, 1 там или 0, не используя конструкцию
C++
1
2
3
4
5
unsigned char a = 0x55;
if(((unsigned char)(a << 5)) >> 7 != 0)
{
/*any code*/
}
То есть смысл - проверить байт флаги без особых нагромождений.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 23:53     Проверка бита
Посмотрите здесь:

Обработка бита C++
Обработка бита C++
Замена бита единицей C++
Копирование бита C++
C++ Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита
Установка бита C++
Замена заданного с клавиатуры бита C++
Наличие бита в байте C++
C++ Битовые операции. Скопировать 4 бита
Замена бита единицей C++
Проверка бита на единицу C++
C++ Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Слепой Уфолог
3 / 3 / 0
Регистрация: 04.09.2013
Сообщений: 18
09.09.2013, 00:11     Проверка бита #2
У первой переменной (random_num) третий бит ноль, у второй переменной единица.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <stdint.h>
 
int main() {
    int random_num = 23252323;
    const uint32_t kThirdBit = 4; //4 равно 001 в бинарном виде
    
    if (random_num & kThirdBit) {
        printf("third bit set\n");
    } else {
        printf("third bit not set\n");
    }
    
    random_num = 23252327;
    if (random_num & kThirdBit) {
        printf("third bit set\n");
    } else {
        printf("third bit not set\n");
    }
    
    return 0;
}
Выдает:
~$ g++ test.cpp -o test
~$ ./test
third bit not set
third bit set
PS:
Ну а чтобы установить третий бит:
random_num |= kThirdBit;

чтобы удалить:
random_num &= ~kThirdBit;
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.09.2013, 00:39     Проверка бита #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdint>
#include <type_traits>
 
template <class Arithmetic>
bool test(Arithmetic n, Arithmetic pos)
{
    static_assert(std::is_unsigned<Arithmetic>::value, "");
    return (Arithmetic(1) << pos) & n;
}
 
int main()
{
    std::cout << test<uint8_t>(85, 1);
    return 0;
}
Байт
Эксперт C
15246 / 9648 / 1431
Регистрация: 24.12.2010
Сообщений: 17,975
09.09.2013, 10:26     Проверка бита #4
Конкретно 2-й
C++
1
if(a&2)...
3-й
C++
1
if (a&4)...
k-й
C++
1
if(A&(1<<(k-1)))...
Yandex
Объявления
09.09.2013, 10:26     Проверка бита
Ответ Создать тему
Опции темы

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