Вопрос по коду Си

программирование программы C++ с++ си

printf("Введите HEX число: ");
scanf("%x",&d); //я точно не помню, может %h, это не важно
unsigned int numl;
numl=d&(1<<1);
if(numl==1) printf("NumLock включен\n"); else printf("NumLock выключен\n");
unsigned int caps=d&(1<<2);
if(caps==1) printf("CapsLock включен\n"); else printf("CapsLock выключен\n");
unsigned int scro=d&(1<<3);
if(scro==1) printf("ScrollLock включен\n"); else printf("ScrollLock выключен\n");
//Программа должна считать число, и проверить значение 3 первых бит, выводя потом значения на консоль(ну по заданию значения раны скролу, нуму и капсу). Но при вводе любого хекса она выдает нули
Ответы:
А вот НЕХ числа вводить. И numl caps scro будут равны 2 4 8 в лучшем случае, а единицам - никогда.
проблема в следующем (1<<1) = 10 двоичное
аналогично (1<<2) = 100 двоичное
(1<<3) = 1000 двоичное
В ответах тебе дело говорят, но я тогда бы поправил строчки
numl=d&(1<<1);      numl = (d >> 1) & 1;
caps=d&(1<<2);      caps = (d >> 2) & 1;
scro=d&(1<<3);       scro = (d >> 3) & 1;
что-то все сложно как-то
enum KB_STATUS
{
 NUM_LOCK = 1<<1,
 CAPS_LOCK = 1<<2,
 SCROLL_LOCK = 1<<3
};
if (d & NUM_LOCK) printf("NumLock включен\n"); else printf("NumLock выключен\n");
if (d & CAPS_LOCK) printf("CapsLock включен\n"); else printf("CapsLock выключен\n");
if (d & SCROLL_LOCK) printf("ScrollLock включен\n"); else printf("ScrollLock выключен\n");


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.