Member 12702056 Ответов: 3

Как я могу сравнить char и int с побитовыми операторами в C++ ?


как я могу сравнить char и int с побитовыми операторами в c++ ?Я не могу понять, что когда я ввожу A, выход будет небольшим a. почему?На самом деле, что означает "сравнение числа int 32 и символа"?как я могу достичь этого результата?Если кто-то знает это,пожалуйста, дайте мне знать также :) Другой вопрос, Можно ли использовать & or ^(exclusive or) для их сравнения?
#include<iostream>
using namespace std;
int main()
{
	int t=32;
	char ch;
	cout<<"Enter a capital letter:";
	cin>>ch;
	ch=(ch|t);
	cout<<ch<<endl;
	return 0;
}


Что я уже пробовал:

Я искал об этом, но не могу найти ответа, который связан с побитовым оператором.

3 Ответов

Рейтинг:
25

Richard MacCutchan

"A" is hex 0x41
32 is hex 0x20
0x41 | 0x20 is 0x61 which is "a"


Я понятия не имею, чего вы пытаетесь достичь, возможно, вам следует отредактировать свой вопрос.


Member 12702056

Спасибо,я получил то, что пытался понять :)

Рейтинг:
2

OriginalGriff

Ваш код ничего не" сравнивает": он считывает символ от пользователя, удостоверяется, что определенный бит равен единице - от значения 32, с которым вы двоично записываете символ, - и выводит его.
Поскольку десятичное значение 32 является шестнадцатеричным 20, а разница между "А" и" А " составляет один бит: http://www.asciitable.com/index/asciifull.gif[^] OR гарантирует, что выводимый им символ всегда будет строчным. Если только это не символ в этом наборе: "@ [ \ ]^", который преобразуется в "` { | } ~ "и"_", которые будут зависеть от шрифта.

И нет, & (AND) и ^ (XOR) тоже не делают сравнений. Чтобы сравнить что-либо, вам нужно использовать условную инструкцию типа if или while например.


Member 12702056

Спасибо за ваш ответ,но на самом деле вы объяснили мне все самым трудным образом :)
Особенно в этой части: "OR гарантирует, что символ, который он выводит, всегда будет строчным. Если только это не символ в этом наборе: "@ [ \ ]^", который преобразуется в "` { | } ~ "и"_", которые будут зависеть от шрифта."

Рейтинг:
10

Patrice T

Цитата:
Я не могу понять, что когда я ввожу A, выход будет небольшим a. почему?
Используйте отладчик, чтобы увидеть, что происходит в вашем коде.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.

Для вашей реальной проблемы:
A является ли ASCII-код 65 и a это ASCII-код 97: разница составляет 32.
ASCII-Википедия, свободная энциклопедия[^]
Учебники-побитовые операторы и битовые манипуляции в C и C++ - Cprogramming.com[^]

Цитата:
Другой вопрос, Можно ли использовать & or ^(exclusive or) для их сравнения?
Это не общее употребление, Но да, это возможно, но все зависит от того, какое сравнение вы хотите сделать.

[Обновление]
Цитата:
Но если я сравниваю char и int, должен ли я изменить один из них на другой тип? например, если я сравниваю x больше или 4,должен ли я изменить x на int или 4 на char?
Похоже, вам нужно правильно выучить C/C++
Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]


Member 12702056

Спасибо за ваш ответ :) На самом деле,я пытался научиться отладке,но я не могу найти хороших объяснений для отладки в dev c++, и я пытался также в Visual Studio,но я не могу загрузить Visual Studio без проблем, все время это вызывает проблемы и ошибки в моем компьютере.

Member 12702056

Я имел в виду сравнение,подобное этому,сравнение между числом и символом ,можем ли мы использовать и, эксклюзивно или в подобных программах?это что-нибудь значит?

Patrice T

В данном случае это ничего не значит.
Используйте обычные операторы сравнения.

Member 12702056

Но если я сравниваю char и int, должен ли я изменить один из них на другой тип? например, если я сравниваю x больше или 4,должен ли я изменить x на int или 4 на char?

Patrice T

C++ будет делать необходимые изменения автоматически.

Member 12702056

Большое вам спасибо за ваши ответы : )

Patrice T

Вы приветствуете.