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

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

Добавлено через 9 минут
Цитата Сообщение от RUSya82 Посмотреть сообщение
тип char беззнаковый,
Из первого поста можно сделать вывод, что переменная к объявлена как знаковая.
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 22:48     преобразвоание int в char. речь не про atoi #8
Хорошо, среды у меня под рукой нет, трудно спорить. Но поэкспериментируйте с калькулятором(инженерным) в Винде, и судя по результатам, у КВАСа, sizeof(char) = 1. И тогда не важно, какого размера int, результат будет таким же. Согласитесь?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
10.11.2010, 22:53     преобразвоание int в char. речь не про atoi #9
RUSya82, Я не оспариваю ваш вывод Результат будет таким же, вы правы.
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
10.11.2010, 23:05     преобразвоание int в char. речь не про atoi #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
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.11.2010, 23:53     преобразвоание int в char. речь не про atoi #11
Кстати, да, char вполне себе знаковый.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,669
11.11.2010, 00:10     преобразвоание int в char. речь не про atoi #12
Цитата Сообщение от KBAC Посмотреть сообщение
... и почему на одном компутере выводится знак 'ш' а на другом 'и'??
От текущей локали зависит.
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 00:18  [ТС]     преобразвоание int в char. речь не про atoi #13
Цитата Сообщение от RUSya82 Посмотреть сообщение
cout >> (int)k; - буквы выводит? быть не могёт!
не, если просто k выводить то разные символы будут на разных компах, а если (инт к) то -24, на обоих машинах
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:18     преобразвоание int в char. речь не про atoi #14
Да, че то почитал Тип char.Signed/unsigned.Отличие типов данных. и совсем запутался. Ладно, завтра буду начитывать.
KBAC
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 72
11.11.2010, 00:19  [ТС]     преобразвоание int в char. речь не про atoi #15
а что есть локаль ?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 00:25     преобразвоание int в char. речь не про atoi #16
KBAC,
C++
1
setlocale(LC_CTYPE, "Rus");//Установка локали в русский
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
11.11.2010, 00:26     преобразвоание int в char. речь не про atoi #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
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:34     преобразвоание int в char. речь не про atoi #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     преобразвоание int в char. речь не про atoi #19
Цитата Сообщение от RUSya82 Посмотреть сообщение
Хорошо, ваше мнение, чтобы Вы ответили автору темы (см. сообщение 1 поста)
если чесно, не особо могу себе представить где такое применяется, чтобы char юзать в виде символа, дак еще и в него присваивать int, значения которого заведомо больше 1го байта
решение как мне кажется :
проверять интовую переменную на выход из диапазона значений char
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2010, 00:52     преобразвоание 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)'

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

Или воспользуйтесь поиском по форуму:
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.11.2010, 00:52     преобразвоание int в char. речь не про atoi #20
Хорошо, когда мы пишем, char f = 'ш';,в f записывается -24? Почему? если код символа 232? Я запутался просто.
Yandex
Объявления
11.11.2010, 00:52     преобразвоание int в char. речь не про atoi
Ответ Создать тему
Опции темы

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