Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

10.11.2010, 21:19. Просмотров 2185. Ответов 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 везде. а знаки разные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

23
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 21:51 #2
sizeof(int) = 2, sizeof(char) = 1.То есть размер типа int - 2 байта, char - 1 байт. Когда Вы присваиваете символьной переменной, число 1000, что в двоичном коде 1111101000, в char записывается только младший бит, то есть 11101000, что в десятичной системе 232. Именно так он и интепретируется, т.к. тип char беззнаковый, и предназначен для хранения кодов символов от 0 до 256(больше в 1 байт не запихнёш. Но тип int - имеет знак, и + или -, и он хранится в старшем бите. И когда вы осуществляете приведение типов из char в int, старший бит интерпретируется как знаковый, оттальные семь бит - число, причем в обратном коде. И это число -24.
1
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
10.11.2010, 22:00  [ТС] #3
было бы еще интересно узнать почему все таки разные буквы выводит.. может разная символьная таблица? но на двух компах стоит все та же ВС 2010
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 22:07 #4
cout >> (int)k; - буквы выводит? быть не могёт!
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.11.2010, 22:27 #5
RUSya82, ага, только размер инта в настоящее время чаще всего равен четырём.
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 22:34 #6
sizeof(long)=4.

Добавлено через 4 минуты
Вообще, размер int по стандартам языка должен быть не менее 2 байт. Остальное на совести разработчиков компилятора
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
10.11.2010, 22:47 #7
RUSya82, sizeof(int) зависит не от компилятора, а от типа процессора. На современных машинах чаще всего 4 байта.
По поводу размеров типов гарантируются следующие соотношения:
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(float)<=sizeof(double)<=sizeof(long double)

Добавлено через 9 минут
Цитата Сообщение от RUSya82 Посмотреть сообщение
тип char беззнаковый,
Из первого поста можно сделать вывод, что переменная к объявлена как знаковая.
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 22:48 #8
Хорошо, среды у меня под рукой нет, трудно спорить. Но поэкспериментируйте с калькулятором(инженерным) в Винде, и судя по результатам, у КВАСа, sizeof(char) = 1. И тогда не важно, какого размера int, результат будет таким же. Согласитесь?
0
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
10.11.2010, 22:53 #9
RUSya82, Я не оспариваю ваш вывод Результат будет таким же, вы правы.
1
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 23:05 #10
Цитата Сообщение от st_dent Посмотреть сообщение
RUSya82, sizeof(int) зависит не от компилятора, а от типа процессора. На современных машинах чаще всего 4 байта.
По поводу размеров типов гарантируются следующие соотношения:
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(float)<=sizeof(double)<=sizeof(long double)

Добавлено через 9 минут

Из первого поста можно сделать вывод, что переменная к объявлена как знаковая.
int - объявлен, как знаковый. А char предназначен для хранения символов, то есть их кодов, то есть чисел от 0 до 255. 1000 в двоичной системе - 1111101000. После попадания в char, остается только один бит, то есть 11101000 - это 232, так как в char, старший бит, не интерпретируется, как знаковый.

Добавлено через 1 минуту
Цитата Сообщение от st_dent Посмотреть сообщение
RUSya82, Я не оспариваю ваш вывод Результат будет таким же, вы правы.
Ну в таком случае, спасибо за дискуссию

Добавлено через 6 минут
Да, я ошибся, sizeof(int)>2, это точно, так как в в нем я хранил числа больше 32767
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.11.2010, 23:53 #11
Кстати, да, char вполне себе знаковый.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.11.2010, 00:10 #12
Цитата Сообщение от KBAC Посмотреть сообщение
... и почему на одном компутере выводится знак 'ш' а на другом 'и'??
От текущей локали зависит.
0
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 00:18  [ТС] #13
Цитата Сообщение от RUSya82 Посмотреть сообщение
cout >> (int)k; - буквы выводит? быть не могёт!
не, если просто k выводить то разные символы будут на разных компах, а если (инт к) то -24, на обоих машинах
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:18 #14
Да, че то почитал Тип char.Signed/unsigned.Отличие типов данных. и совсем запутался. Ладно, завтра буду начитывать.
0
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 00:19  [ТС] #15
а что есть локаль ?
0
11.11.2010, 00:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2010, 00:19
Привет! Вот еще темы с ответами:

конвертирование (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), ни как не могу понять эти переменные...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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