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

преобразвоание int в char. речь не про atoi - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
10.11.2010, 21:19     преобразвоание int в char. речь не про atoi #1
помогите разобраться, как происходит преобразование из int в char. например:
C++
1
2
3
int i =1000;
char k=232;
cout<<(int)k;
каким образом на экран выводится -24. и почему на одном компутере выводится знак 'ш' а на другом 'и'??

Добавлено через 13 минут
аа, блин, пардон.
C++
1
2
3
int i =1000;
char k=i;
cout<<(int)k;
а что касается 'и' и 'ш', то значение (int)k = -24 везде. а знаки разные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 00:58     преобразвоание int в char. речь не про atoi #21
RUSya82, Локаль подключить пробовали?
И явно привести к unsigned char кстати
248 кстати.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    std::locale().global(std::locale(""));
    unsigned char f='ш';
    std::cout<<(unsigned int)f<<'\n';
    std::cout<<f<<'\n';
    return 0;
}
Собственно и так можно.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    std::locale().global(std::locale(""));
    char f='ш';
    std::cout<<static_cast<int>(static_cast<unsigned char>(f))<<'\n';
    std::cout<<f<<'\n';
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 01:01  [ТС]     преобразвоание int в char. речь не про atoi #22
Цитата Сообщение от illuminati Посмотреть сообщение
если чесно, не особо могу себе представить где такое применяется, чтобы char юзать в виде символа, дак еще и в него присваивать int, значения которого заведомо больше 1го байта
решение как мне кажется :
проверять интовую переменную на выход из диапазона значений char
вычисление адресса в хеш-функциях
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
11.11.2010, 01:06     преобразвоание int в char. речь не про atoi #23
Цитата Сообщение от RUSya82 Посмотреть сообщение
Хорошо, когда мы пишем, char f = 'ш';,в f записывается -24? Почему? если код символа 232? Я запутался просто.
код символа считывается без знака т.е.1110 1001, при исп. cout << c;
десятичная цифра выводится с учетом знака, т.е. 1 - минус, и 110 1001 - тело перем.
в итоге :
110 1001 - это 105 в десятичной сс
-128 + 105 + 1(особенности доп.кода) = -24
т.е. cout сам решает как ему юзать данную переменную

вот за что я всегда любил Си, так это за наглядность printf и scanf

Добавлено через 1 минуту
KBAC, а заюзать что-то больше char нельзя ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2010, 01:14     преобразвоание int в char. речь не про atoi
Еще ссылки по теме:

C++ Подскажите пожалуйста с int main(int argc, char*argv[])
C++ Как в выделенную память записать поочередно число int, массив char[n], и еще число int
C++ [BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)'

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

Или воспользуйтесь поиском по форуму:
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 01:14  [ТС]     преобразвоание int в char. речь не про atoi #24
Цитата Сообщение от illuminati Посмотреть сообщение
KBAC, а заюзать что-то больше char нельзя ?
да собственно это просто вопрос экзаменационный , надо было разобраться как он так преобразует. вроде все правильно разобрались. а хеш функция это это я просто привел пример где используется.

Добавлено через 2 минуты
Цитата Сообщение от illuminati Посмотреть сообщение
т.е. cout сам решает как ему юзать данную переменную
так можно ведь явно указать тип unsigned и будет все нормально выводиться как надо
Yandex
Объявления
11.11.2010, 01:14     преобразвоание int в char. речь не про atoi
Ответ Создать тему
Опции темы

Текущее время: 00:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru