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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.88
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:13     unsigned char 0....255?! #1
Всем привет.
Всем известно из разной учебной литературы что 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;
}
получается вот это
Миниатюры
unsigned char 0....255?!  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:22     unsigned char 0....255?! #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);
А тут вообще ничего не происходит.
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:26  [ТС]     unsigned char 0....255?! #3
Я вас не совсем понял как мне избежать переполнения

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
Код C++
1
ASCII_866[i].symbol = char(i);
А тут вообще ничего не происходит.
На сколько мне известно есть явные и не явные преобразования так вот здесь происходит явное преобразование типа int в char
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:28     unsigned char 0....255?! #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.
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:31  [ТС]     unsigned char 0....255?! #5
Сделал как вы сказали и получил
Миниатюры
unsigned char 0....255?!  
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:35     unsigned char 0....255?! #6
Цитата Сообщение от stawerfar Посмотреть сообщение
std::cout<<ASCII_866[i].number-'0';
Уберите отсюда " - '0' ".
И вообще я логики вашей программы не понимаю. Зачем создавать отдельную структуру для номера и символа?
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:35  [ТС]     unsigned char 0....255?! #7
а изменив
C++
1
std::cout<<ASCII_866[i].number-'0';
на
C++
1
std::cout<<int(ASCII_866[i].number);
получил что нужно, почему так?
Миниатюры
unsigned char 0....255?!  
stawerfar
 Аватар для stawerfar
140 / 54 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:38  [ТС]     unsigned char 0....255?! #8
Цитата Сообщение от diagon Посмотреть сообщение
И вообще я логики вашей программы не понимаю. Зачем создавать отдельную структуру для номера и символа?
В том что я написал логики конечно нет, но в этой программе я сымитировал суть проблемы или так сказать вопроса. Зачем выкладывать всё если в этом нет необходимости.
Большое спасибо за ответы!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2012, 14:39     unsigned char 0....255?!
Еще ссылки по теме:

C++ Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
C++ Unsigned char to string
C++ Приведение типов unsigned char[2] to unsigned char [64]

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.03.2012, 14:39     unsigned char 0....255?! #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;
}
Yandex
Объявления
23.03.2012, 14:39     unsigned char 0....255?!
Ответ Создать тему
Опции темы

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