Форум программистов, компьютерный форум 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. Просмотров 2081. Ответов 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;
}
получается вот это
Миниатюры
unsigned char 0....255?!  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 14:13     unsigned char 0....255?!
Посмотрите здесь:

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

Unsigned char to string - C++
Привет всем. У меня полная непонятица unsigned char c = '1'; std::string ass((char*)c); Unhandled exception at 0x012655D1 in...

Unsigned char to vector - C++
{ vector&lt;byte&gt; resBuffer; unsigned char buffer; //string reply; //Receive a reply from the server if(...

Работа с unsigned char - C++
Есть указатель на тип unsigned char, содержащий в себе 4-ех байтное число и переменная типа long. Как записать в эту переменную значение из...

Hex в unsigned char - C++
Здравствуйте! У меня есть одна проблема, которую не могу решить, ну вот, у меня есть файл в нем hex строка, такого вида: 68 65 6c 6c 6f...

CRC16, Unsigned Char и Полином - C++
CRC Verifying code #define UCHAR unsigned char #define UWORD unsigned int UWORD code CRC_TABLE={ ...

Vector<unsigned char> в int - C++
есть vector&lt;unsigned char&gt; размером 4 байта..и мне надо перевести их в 1 число типа int. т.е. типо int command = tempN.data(); но ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1928 / 1194 / 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
141 / 55 / 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
1928 / 1194 / 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
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
23.03.2012, 14:31  [ТС]     unsigned char 0....255?! #5
Сделал как вы сказали и получил
Миниатюры
unsigned char 0....255?!  
diagon
Higher
1928 / 1194 / 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
141 / 55 / 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
141 / 55 / 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?!
Еще ссылки по теме:

Контейнер для unsigned char * - C++
возьмем например char * для него в с++ есть стандартный контейнер и называется он std::string возьмем например Delphi там...

синтаксис указателя на unsigned char - C++
РЕбята, не могу сообразить. Смотрите, этот код компилится: char* array ; array = &quot;dddddddddd&quot;; Теперь нулевой элемент...

Передача в функцию unsigned char [ ] - C++
Заполняю массив unsigned char sizeBuf; for (int i = 0; i &lt; 4; i++){ sizeBuf =...

Конвертация string to unsigned char - C++
День всем добрый! Каким образом можно произвести перевод значения переменной типа &quot;string&quot; в переменную типа &quot;unsigned char&quot;? В...

Как перевести String^ в char[255] - C++
Доброго времени суток. Нужно перевести String в char. Делаю следующее: String^ func=Convert::ToString(textBox1-&gt;Text); const...


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

Или воспользуйтесь поиском по форуму:
diagon
Higher
1928 / 1194 / 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?!
Ответ Создать тему
Опции темы

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