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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
#1

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

10.11.2010, 21:19. Просмотров 2148. Ответов 23
Метки нет (Все метки)

помогите разобраться, как происходит преобразование из 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 везде. а знаки разные
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 21:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос преобразвоание int в char. речь не про atoi (C++):

Реализация функции char *padl(const char *string, int len, int c=' ') - C++
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

Как превести из char* в int и наоборот из int в char*? - C++
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому написать функцию не сложно, но наверняка это...

Форматирование строк, char to int & int to char - C++
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn str_to_num(const str) // Тупо...

Подскажите пожалуйста с int main(int argc, char*argv[]) - C++
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то программе передан хотя бы один аргумент, если...

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*) - C++
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.11.2010, 00:25 #16
KBAC,
C++
1
setlocale(LC_CTYPE, "Rus");//Установка локали в русский
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
11.11.2010, 00:26 #17
Цитата Сообщение от RUSya82 Посмотреть сообщение
sizeof(int) = 2
fail, int в 32х битных системах = 4 байта
Цитата Сообщение от RUSya82 Посмотреть сообщение
int - 2 байта
см. выше
Цитата Сообщение от RUSya82 Посмотреть сообщение
в char записывается только младший бит
записывается в переменную то, что помещается, а не младший бит
Цитата Сообщение от RUSya82 Посмотреть сообщение
тип char беззнаковый
когда это стал? -128...0...127 всегда было так
Цитата Сообщение от RUSya82 Посмотреть сообщение
предназначен для хранения кодов символов
вполне себе целочисленный тип, от int отличается размером...
Цитата Сообщение от RUSya82 Посмотреть сообщение
0 до 256
снова fail
Цитата Сообщение от RUSya82 Посмотреть сообщение
обратном коде
в дополнительном
Цитата Сообщение от RUSya82 Посмотреть сообщение
Ладно, завтра буду начитывать
правильное решение
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:34 #18
Цитата Сообщение от illuminati Посмотреть сообщение
fail, int в 32х битных системах = 4 байта

см. выше

записывается в переменную то, что помещается, а не младший бит

когда это стал? -128...0...127 всегда было так

вполне себе целочисленный тип, от int отличается размером...

снова fail

в дополнительном

правильное решение
Хорошо, ваше мнение, чтобы Вы ответили автору темы (см. сообщение 1 поста)

Добавлено через 1 минуту
Цитата Сообщение от illuminati Посмотреть сообщение
в char записывается только младший бит
записывается в переменную то, что помещается, а не младший бит
Сори, имел ввиду 8 младших бит
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
11.11.2010, 00:41 #19
Цитата Сообщение от RUSya82 Посмотреть сообщение
Хорошо, ваше мнение, чтобы Вы ответили автору темы (см. сообщение 1 поста)
если чесно, не особо могу себе представить где такое применяется, чтобы char юзать в виде символа, дак еще и в него присваивать int, значения которого заведомо больше 1го байта
решение как мне кажется :
проверять интовую переменную на выход из диапазона значений char
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:52 #20
Хорошо, когда мы пишем, char f = 'ш';,в f записывается -24? Почему? если код символа 232? Я запутался просто.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
11.11.2010, 00:58 #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  [ТС] #22
Цитата Сообщение от illuminati Посмотреть сообщение
если чесно, не особо могу себе представить где такое применяется, чтобы char юзать в виде символа, дак еще и в него присваивать int, значения которого заведомо больше 1го байта
решение как мне кажется :
проверять интовую переменную на выход из диапазона значений char
вычисление адресса в хеш-функциях
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
11.11.2010, 01:06 #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 нельзя ?
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 01:14  [ТС] #24
Цитата Сообщение от illuminati Посмотреть сообщение
KBAC, а заюзать что-то больше char нельзя ?
да собственно это просто вопрос экзаменационный , надо было разобраться как он так преобразует. вроде все правильно разобрались. а хеш функция это это я просто привел пример где используется.

Добавлено через 2 минуты
Цитата Сообщение от illuminati Посмотреть сообщение
т.е. cout сам решает как ему юзать данную переменную
так можно ведь явно указать тип unsigned и будет все нормально выводиться как надо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2010, 01:14
Привет! Вот еще темы с ответами:

конвертирование (char)int (char*)int - C++
Вопрос такой каким образом можно выполнить вот такую операцию: у нас есть: int c = 12; char d = ''PS &quot;; Получиться должно...

[BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)' - C++
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;iostream.h&gt; #include&lt;windows.h&gt; #include&lt;cstring.h&gt; #include&lt;string.h&gt; ...

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

Что есть argc и **argv в функции int main(int argc, char **argv)? - C++
Здраствуйте, уважаемые кодеры! Что означает argc и **argv в функции int main(int argc, char **argv), ни как не могу понять эти переменные...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.11.2010, 01:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru