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

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

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

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

08.09.2013, 23:53. Просмотров 2876. Ответов 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++
Подскажите, корректно ли такое сравнение if((paramData &amp;= 0x80) == 1) // проверка на наличие единицы(1) в 8-ом бите данного байта длины...

Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа - C++
Дано число. Создать 2 переменные, одна из которых хранит 2 старших бита исходного числа, другая 2 младших бита этого числа. код частично...

Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с первого бита - C++
Ввести целое A. Извлечь 3 бита числа A, начиная со второго и вставить их в число B, начиная с ервогоп бита. B=1A05h.

Копирование бита - C++
Надо упростить и оптимизировать строку *p=((*p&amp;0x80)&gt;&gt;8)|(*p&amp;0x80);. Задача - скопировать (не переместить) старший бит байта в младший бит...

Обработка бита - C++
Название Размерность Тип N 16 вход M 4 вх P ...

Обработка бита - C++
На входе даны два 8-х разарядных числа IN_0, IN_1. Если на пятом месте в IN_0 стоит 0, то поменять знак числа IN_1,(и вывести...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Слепой Уфолог
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
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 10:26     Проверка бита
Еще ссылки по теме:

Установка бита - C++
Дано целое число A и целое число k. Выведите число, которое получается из числа A установкой значения k-го бита равному 1.

Замена бита единицей - C++
Как реализовать данное условие? Ввести последовательность из 8 целых чисел. В каждом втором числе заменить ( i-1)-й бит единицей, где...

Наличие бита в байте - C++
Подскажите, правильна ли реализация проверки наличия бита в байте #define MARK 0x02 .. if (dataRead &amp; MARK) { ...

Замена бита единицей - C++
Здравствуйте, помогите пожалуйста решить задачку. Нужно: ввести последовательность из 8 целых чисел. В каждом втором числе заменить (...

Инвертировать 2 средних бита в числе - C++
люди помогите пожалуйста с заданием. Часть кода имеется, составил число, вот только с инвертацией битов застрял. long...

Вывести значение заданного бита - C++
Как вывести значение заданного бита в числе?


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

Или воспользуйтесь поиском по форуму:
Байт
Эксперт C
15841 / 10168 / 1522
Регистрация: 24.12.2010
Сообщений: 19,175
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     Проверка бита
Ответ Создать тему
Опции темы

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