в С ++ у меня есть два символа, содержащие шестнадцатеричные значения, например:
char t = 0x4;
char q = 0x4;
Как мне сравнить, если два значения, содержащиеся в char, одинаковы? Я старался
if (t == q) // should give me true
но нет, любая помощь, спасибо!
Это должно сработать. Как вы думаете, почему это не так?





Ах, я нашел решение:
if (t & q)
Это должно быть, если (t && q) Ваше утверждение (t & q) выполняет поразрядное сравнение. Конечно, это может быть то, что вы хотите.
В любом случае, он спросил не об этом. Если t и q инициализированы, как представлено, то t == q определенно дает истину - по крайней мере, с моим компилятором.
Мартин, проблема в том, что он работает для слишком многих значений. Пример t = 3 и q = 1.
BobS, хотя я считаю, что голосование против было немного чрезмерным, я думаю, вам следовало просто отредактировать свой вопрос и добавить эту информацию в его конец.
Символ - это всего лишь 8-битное целое число. Не имеет значения, инициализировали ли вы его шестнадцатеричным или десятичным литералом, в любом случае значение символа впоследствии будет таким же.
Так:
char t = 0x4;
char q = 0x4;
if (t == q)
{
//They are the same
}
Это эквивалентно:
char t = 4;
char q = 4;
if (t == q)
{
//They are the same
}
Вы упомянули, что вышесказанное неверно, но у вас должна быть ошибка в вашем коде или t и q не должны совпадать.
Что вы предложили ...
if (t == q) // should give me true but no, any help, thanks!
не является правильным. Почему?
t & q выполняет побитовое сравнение, возвращая значение, в котором оба выровненных бита равны 1.
Термин «if (t & q)» вернет истину, если любой из битов t и q является общим.
поэтому, если t = 3, который находится в двоичном формате 00000011, и q = 1, который находится в двоичном формате 00000001, тогда (t & q) вернет истину, даже если они не равны.
Подождите, здесь что-то не так. Это должно выполняться и выполняется, если ветвь условного оператора. Нам нужно больше контекста. Ваш ответ "a & b" неверен - он будет "истинным" для любых перекрывающихся битов в представлении a и b.