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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

unsigned char 0....255?! - C++

23.03.2012, 14:13. Просмотров 2113. Ответов 8
Метки нет (Все метки)

Всем привет.
Всем известно из разной учебной литературы что unsigned char имеет диапазон значений от 0 до 255.
Но почему тогда при этом коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
 
 
const int ciMAX = 255;//количество символов в ASCII Russian_Russia.1251
 
struct 
{
    unsigned char symbol;//символ
    unsigned char number;//номер
}ASCII_866[ciMAX];
 
int main(void)
{
 
    for(int i =0;i<ciMAX;i++)
    {
        ASCII_866[i].symbol = char(i);
        ASCII_866[i].number = i+'0';
 
    }
    for(int i =0;i<ciMAX;i++)
    {
        std::cout<<ASCII_866[i].number-'0';
        if(i!=0&&!(i%20))
        std::cout<<std::endl;
    }
    std::cout<<std::endl;
 
    system("pause");
return 0;
}
получается вот это
0
Миниатюры
unsigned char 0....255?!  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос unsigned char 0....255?! (C++):

Приведение типов unsigned char[2] to unsigned char [64] - C++
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main int main() { SHA1Context sha; uint8_t...

Массив: Вычислить сумму элементов, лежащих на главной диагонали матрицы {Cÿ}, образованной следующим образом: Cÿ = aÿ + bÿ - C++
Здравствуйте, дорогие форумчане!;) -------------------------------------- Помогите, пожалуйста, решить задание. ...

Ошибка в работе с файлами: error: incompatible types in assignment of ‘char*’ to ‘char* [255]’ - C++
Суть задания Есть файл допустим 1.txt нужно выполнить обработку этого файла а результат вывести в этот же файл с другим расширением ...

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

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ? - C++
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Неверная конверсия из char* в unsigned char* - C++
Здравствуйте. Почему-то ловлю ошибку, гласящую о том, что не удалась конверсия из char* в *unsigned char*. Не понимаю, почему она вылазит?...

8
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:22 #2
Цитата Сообщение от stawerfar Посмотреть сообщение
C++
1
ASCII_866[i].number = i+'0';
Равносильно
C++
1
ASCII_866[i].number = i+48;
Поэтому происходит переполнение.

C++
1
ASCII_866[i].symbol = char(i);
А тут вообще ничего не происходит.
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:26  [ТС] #3
Я вас не совсем понял как мне избежать переполнения

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
Код C++
1
ASCII_866[i].symbol = char(i);
А тут вообще ничего не происходит.
На сколько мне известно есть явные и не явные преобразования так вот здесь происходит явное преобразование типа int в char
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:28 #4
C++
1
2
3
ASCII_866[i].number = i;
//...
std::cout << ASCII_866[i].number;
Добавлено через 2 минуты
Цитата Сообщение от stawerfar Посмотреть сообщение
На сколько мне известно есть явные и не явные преобразования так вот здесь происходит явное преобразование типа int в char
Угу. Только char, грубо говоря, является int'ом, только занимает 1 байт. Это почти тоже самое, что написать
C++
1
2
int i = 12;
short s = (short) i;
Только вместо short у вас char.
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:31  [ТС] #5
Сделал как вы сказали и получил
0
Миниатюры
unsigned char 0....255?!  
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:35 #6
Цитата Сообщение от stawerfar Посмотреть сообщение
std::cout<<ASCII_866[i].number-'0';
Уберите отсюда " - '0' ".
И вообще я логики вашей программы не понимаю. Зачем создавать отдельную структуру для номера и символа?
1
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:35  [ТС] #7
а изменив
C++
1
std::cout<<ASCII_866[i].number-'0';
на
C++
1
std::cout<<int(ASCII_866[i].number);
получил что нужно, почему так?
0
Миниатюры
unsigned char 0....255?!  
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:38  [ТС] #8
Цитата Сообщение от diagon Посмотреть сообщение
И вообще я логики вашей программы не понимаю. Зачем создавать отдельную структуру для номера и символа?
В том что я написал логики конечно нет, но в этой программе я сымитировал суть проблемы или так сказать вопроса. Зачем выкладывать всё если в этом нет необходимости.
Большое спасибо за ответы!
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:39 #9
Почитайте какой-нибудь учебник, где написано, что такое char.
По сути это обычный целочисленный тип, просто он весит всего 1 байт и для него перегружен оператор вывода.
Для примера вывод ASCII таблицы - сначала выводится номер символа, затем сам символ.
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    for (int i = 0; i < 128; ++i)
        std::cout << i << " - " << (char) i << std::endl;
}
1
23.03.2012, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2012, 14:39
Привет! Вот еще темы с ответами:

Unsigned char * в char * и наоборот - C++
Здравствуйте!помогите перевести unsigned char * в char * и наоборот без использования printf

const char и unsigned char - C++
Всем привет. Такое дело. Это даже проблемой не назовешь, но суть такая. Мне нужно записать const char в unsigned char через конструктор...

Совместимость char и unsigned char - C++
Есть некие числа в виде unsigned char. Есть строка в виде массива char (которая потом сбрасывается в файл с помощью fputs). В программе...

Типы данных - где нужно использовать char, а где unsigned char? - C++
Всем привет! У меня вопрос, искал ответ на него, но безуспешно. Вопрос следующий: есть два типа char и unsigned char. Я понимаю, что в...


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

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

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