Как работают Char и INT в C ++ -- c++ поле с участием char поле с участием integer поле с участием int пол Связанный проблема

How do char and int work in C++


1
vote

проблема

русский

Может быть, я собираюсь задать глупый вопрос, но я хочу подтвердить, как работает Char? Позвольте мне объяснить с примерами того, что я хочу спросить. Пусть предположим, что я объявляю <код> char variable , а затем <код> input 6 или любой целочисленный символ.

 <код> #include <iostream> using namespace std; int main(){     char a;     cin >> a;     cout << a*a; // I know here input's ASCII value will multiply     return 0; }   

То же, что и для целочисленного <код> input 6

 <код> #include <iostream> using namespace std; int main(){     int a;     cin >> a;     cout << a*a; // Why compiler not take input's ASCII Value here?     return 0; }   

Я думаю, теперь мой вопрос понятен.

Английский оригинал

May be I'm going to ask a stupid question, but I want to confirm that how char works? Let me explain with examples what i want to ask. Let suppose I declare a char variable and then input 6 or any integer character.

#include <iostream> using namespace std; int main(){     char a;     cin >> a;     cout << a*a; // I know here input's ASCII value will multiply     return 0; } 

Same as for integer input 6

#include <iostream> using namespace std; int main(){     int a;     cin >> a;     cout << a*a; // Why compiler not take input's ASCII Value here?     return 0; } 

I think now my question is clear.

</div
           
   
   

Список ответов

4
 
vote
vote
Лучший ответ
 

<Код> char - это фундаментальный тип данных, размером 1 байт (не обязательно 8bits !!!), способный представлять по меньшей мере Диапазон кода ASCII всех персонажей. Итак, например, <код> char x = 'a'; действительно хранит значение ASCII <код> 'a' , в данном случае 97. Однако ostream операторы перегружены, чтобы они " Знайте: «Как справиться с char , а вместо того, чтобы слепо отображать <код> 97 в строке, как <код> cout << x; Они отображают представление ASCII символа, то есть <Код> 'a' .

Однако всякий раз, когда вы делаете <код> offline_access0 , компилятор выполняет то, что называется Интегральная продвижение и неявно преобразует данные в <код> offline_access1 на <код> offline_access2 . Итак, для компилятора, выражение <код> offline_access3 переводится в <код> offline_access4 , который является результатом <код> offline_access5 , поэтому вы в конечном итоге отображаются <код> offline_access6 .

Обратите внимание, что для компилятора <код> offline_access7 и <Код> offline_access8 - два разных типа. Это может отличаться между двумя. Таким образом, <код> offline_access9 отображает символ только при входе типа <код> char0 или типа, неявного конвертируемого в <код> char1 .

 

char is a fundamental data type, of size 1 byte (not necessarily 8bits!!!), capable of representing at least the ASCII code range of all characters. So, for example, char x = 'a'; really stores the ASCII value of 'a', in this case 97. However, the ostream operators are overloaded so they "know" how to deal with char, and instead of blindly displaying 97 in a line like cout << x; they display the ASCII representation of the character, i.e. 'a'.

However, whenever you do a * a, the compiler performs what's called integral promotion, and implicitly converts the data in the char to an int. So, for the compiler, the expression a * a is translated into (int)a * (int)a, which is the result of 97 * 97, so you end up displaying 9409.

Note that for the compiler char and int are two different types. It can differentiate between the two. So operator<< displays a character only when the input is of type char or of a type implicitly convertible to char.

</div
 
 
     
     
1
 
vote

В случае char2 , это не двоичный, который умножается, это значение ASCII все, что вы набрали. В случае char3 , ASCII Значение <Код> char4 , поэтому <код> char5 выводится. Когда <код> char6 - <код> char7 , <код> char8 сохраняется напрямую, поэтому <код> char9 выводится.

 

In the case of char, it's not the binary which is being multiplied, it's the ASCII value of whatever you typed in. In the case of 6, the ASCII value is 54, so 2916 is output. When a is an int, 6 is stored directly, so 36 is output.

</div
 
 
 
 
0
 
vote

В случае int он читает число, которое вы вводите как числовое значение вместо его значения ASCII. Поэтому вы можете использовать номера только для целых чисел, однако Char позволяет использовать любой символ (Ex. A, B, C, D | 1,2,3,4 |! #% ^) И он использует свое значение ASCII. Значение ASCII 4 составляет 52, например, и значение ASCII A, * составляют 65 и 42 соответственно. Примечание: заглавные буквы различны по сравнению с строчными буквами (ex. s = 83, в то время как наоборот s = 115).

Надеюсь, это помогло даже немного.

 

In the case of int it reads the number you type in as a numeric value instead of its ASCII value. Therefore you can ONLY use numbers for integers however char allows you to use any character (Ex. A,B,C,D | 1,2,3,4 | !#%^) and it uses its ASCII value. The ASCII value of 4 is 52 for example, and the ASCII value of A, * are 65, and 42 respectively. NOTE: Capital Letters are different in comparison to lower case letters (Ex. S = 83, while conversely s = 115).

Hopefully this helped even a little bit.

</div
 
 
0
 
vote

Это из-за неявного преобразования типа:

Неявные преобразования выполняются всякий раз, когда выражение некоторого типа T1 используется в контексте, который не принимает этот тип, но принимает некоторые Другой тип t2, в частности:

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

в вашем примере

 <код> char a; cin >> a; cout << a*a; /   

Оператор * ожидает, что встроенный тип, так что типа <Код> char неявно преобразован в <код> int , поэтому при преобразовании CHAN в Int, система использует соответствующее значение ASCII CHAR. Пожалуйста, смотрите более подробную информацию здесь http://en.cppreference.com/w/cpp /language/ imployit_cast

 

This is because of implicit type conversion:

Implicit conversions are performed whenever an expression of some type T1 is used in context that does not accept that type, but accepts some other type T2, in particular:

When the expression is used as an operand with an operator that expects T2

In your example

char a; cin >> a; cout << a*a; / 

Operator * expects an integral type , so type char is implicitly converted to int, so while converting char to int, system use corresponding ASCII value of char. Please see more details here http://en.cppreference.com/w/cpp/language/implicit_cast

</div
 
 

Связанный проблема

-1  Бросить исключение, когда неправильный тип введен в  ( Throw exception when a wrong type is keyed in ) 
Я должен написать программу C ++, в которой функция состоит в том, чтобы прочитать два номера double Тип чисел из клавиатуры и добавить <код> try BLOCK, чт...

0  Как захватывать события, выпущенные из нового окна всплывающего  ( How to capture events fired from new popup ie window ) 
Приветствия! <Сильная> Ситуация: My ActiveX DLL содержит индивидуальный webbrowser. WebBrowser отображает веб-страницу. Когда пользователь нажимает на сс...

-1  C ++ DO В то время как проблемы с петлей [закрыто]  ( C do while loop issues ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

2  Создание хеша для данных больше, чем память (без зарядки)  ( Generating a hash for data larger than memory without getting arrested ) 
Добрый послеобеденный переполнец! ;) Что я хочу сделать: Я заинтересован в проверке передаваемой целостности файлов. Как я подошел к нему: Я рассм...

0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++  ( Proper way of using variadic template function call with string arguments c ) 
Здравствуйте, что не то, что я здесь делаю, используя вариадические шаблоны через строку? Как правильно использовать его для достижения заданий ниже? <код> ...

1  Шаблон статических классов через динамические связанные библиотеки  ( Template static classes across dynamic linked libraries ) 
У меня есть классовый класс со статическим значением, как это: <код> template <class TYPE> class A{ static TYPE value; }; в коде dll I назначаю ст...

6  Singleton & Multi-Threading  ( Singleton multi threading ) 
У меня есть следующий класс <код> class Singleton { private: static Singleton *p_inst; Singleton(); public: static Singleton * instance()...

-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто]  ( Loop that compiles and runs in int main function wont compile when put into a se ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыто. Этот вопрос нуждается в Детали отладки . В настоящее вр...

3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии?  ( How to create closed areas convex polygons from set of line segments ) 
Следующая проблема находится в 2D, поэтому некоторые упрощения могут быть сделаны при предложении ответов. Мне нужно создать закрытые области (определены ли...

3  Отправка HTTP Post Запрос на обновление содержимого файла с использованием C ++ REST SDK Casablanca  ( Sending a http post request for updating file contents using c rest sdk casabl ) 
Я пытаюсь обновить содержимое файла на сервере Alfresco, используя C ++ SDK SDK. Я использую URL Alfresco CMIS URL для отправки запроса. Быть более конкретным...

14  Классы, Rvalues ​​и Rvalue Список  ( Classes rvalues and rvalue references ) 
Lvalue - это значение, связанное с окончательной областью памяти, тогда как rvalue - это значение выражения, существование которого является временным, а не о...

57  Как сделать макрос C ++ вести себя как функция?  ( How do i make a c macro behave like a function ) 
Допустим, по какой-то причине вам нужно написать макрос: <код> MACRO(X,Y) . (давайте предположим, что есть веская причина, по которой вы не можете использова...

29  Добавление! Оператор и SQRT (), POW () и т. Д. Для пример примерка калькулятора  ( Adding the operator and sqrt pow etc to a calculator example applicatio ) 
Я делаю упражнения в новой книге Strustrup "Принципы программирования и практики с использованием C ++" и было интересно, если кто-нибудь на переполнении ст...

-1  Приложение C ++ в массивах с использованием арифметического указателя  ( C app on arrays using pointer arithmetic ) 
Вопрос: как я могу генерировать случайное животное из массива, используя эту функцию? <код> const int MAX =12; //12 animals const int MAXSTR = 10; ...

0  Как настроить VS2008 для эффективного развития C ++  ( How to setup vs2008 for efficient c development ) 
Обычно I Программируйте в C #, но были вынуждены выполнять работу в C ++. Похоже, что интеграция с Visual Studio (2008) действительно плохо по сравнению с C #...

Связанный проблема

-1  Бросить исключение, когда неправильный тип введен в 
0  Как захватывать события, выпущенные из нового окна всплывающего 
-1  C ++ DO В то время как проблемы с петлей [закрыто] 
2  Создание хеша для данных больше, чем память (без зарядки) 
0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++ 
1  Шаблон статических классов через динамические связанные библиотеки 
6  Singleton & Multi-Threading 
-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто] 
3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии? 
3  Отправка HTTP Post Запрос на обновление содержимого файла с использованием C ++ REST SDK Casablanca 
14  Классы, Rvalues ​​и Rvalue Список 
57  Как сделать макрос C ++ вести себя как функция? 
29  Добавление! Оператор и SQRT (), POW () и т. Д. Для пример примерка калькулятора 
-1  Приложение C ++ в массивах с использованием арифметического указателя 
0  Как настроить VS2008 для эффективного развития C ++ 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.