![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.10.2019
Сообщений: 8
|
![]()
Продолжаю свое обучение ( по книжке Г. Шилдта, базовый курс с++, если это важно)
после набора программы возник вопрос: #include<iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); unsigned char ch; ch = 32; while (ch) { cout << ch; ch++; } return 0; } В книге дано пояснение:Рассмотрим while-выражение из предыдущей программы. Возможно, вас удивило, что оно состоит всего лишь из одной переменной ch. Но "ларчик" здесь открывается просто. Поскольку переменная ch имеет здесь тип unsigned char, она может содержать значения от 0 до 255. Если ее значение равно 255, то после инкрементирования оно "сбрасывается" в нуль. Следовательно, факт равенства значения переменной ch нулю служит удобным способом завершить while-цикл. 1. Хочу уточнить. Модификатор unsigned позволяет тип данных чар использовать как ing? Ибо ему присвоено значение числовое 32? я так понимаю когда в таблице(для 16 битки) unsigned char может принимать значение от 0 до 255? 2. Немного непонятна "алгоритмика"(поправьте если неправ): изначально ch=32. в скобках он сначала выводится через cout он вырастает на +1 и так до 255. потом все заканчивается. что произойдет когда значение 255? Он поймет что достиг предела? и цикл закончит. Почему цикл после достижения 255 и инкременирования достижения 0 закончит программу. Ведь в условии ch=32 и после значения 0 будет 1 и так далее. почему цикл просто не продолжается. Ладно если было бы в условии ch<32. А так пока затрудняюсь... 3. как происходит "преобразование" из числового значения ch в символ? PS. Форумчане, заранее благодарен за помощь и понимание. Без Вас не справлюсь) |
![]() |
![]() |
![]() |
#2 | |||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
Как что?
И что присвоение 32 должно сделать с переменной по вашему? Думаете это как в телефоне оператор соединит? Цитата:
unsigned char - это в большинстве случаев 1 байт, т.е. 00000000b - 11111111b. Можете сами перевести значения и проверить. Цитата:
Цитата:
Причем тут это? Считайте, что там написано ch != 0 И цикл не выполнился бы не разу... Есть специальные таблицы, например, 1251, 866, utf8 (65001) ... В них символы пронумерованы. |
|||
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.10.2019
Сообщений: 8
|
![]()
Я хотел написать как int.
ну тогда ch<=32. Хотя признаю вашу правоту(0 для while как ложь) те unsighed char 35=[определенный символ]? |
![]() |
![]() |
![]() |
#4 |
Регистрация: 02.10.2019
Сообщений: 8
|
![]()
Я имел ввиду эту таблицу.
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 02.10.2019
Сообщений: 8
|
![]()
p51x, Спасибо большое) Вы реально помогли)
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
Тогда нет. Даже просто char можно "использовать как int". Естественно, с оговорками на размер и т.д.
И цикл выполнится 1 раз. Зависит от cp. Ну так прочитайте ее - в ней написано, что unsigned char занимает 8 бит. |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,378
|
![]()
p51x
Цитата:
Значение переменной равное 0 в некоторых языках и, в частности Си, интерпретируется как FALSE. И не важно в каком месте логического выражения используется переменная. Это может быть цикл while, do, условие в операторе if или просто логическая функция.
Как-то так, ...
|
|
![]() |
![]() |
![]() |
#8 | |||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() Цитата:
Цитата:
Код:
А так, да: https://en.cppreference.com/w/cpp/la...an_conversions Цитата:
|
|||
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,378
|
![]()
p51x
Цитата:
Код:
Код:
У меня работает: ![]() Код:
Как-то так, ...
|
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,716
|
![]() Код:
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
sprintf в unsigned char. Есть ли разница? | Салага | Общие вопросы C/C++ | 6 | 04.03.2018 05:02 |
конвертирование из unsigned char в char | Sparky | Помощь студентам | 8 | 22.05.2012 16:46 |
'unsigned char [512]' в 'const char *' | frommars | Visual C++ | 8 | 02.07.2011 13:37 |
unsigned char в array<Byte> | Artemprodigy | Visual C++ | 0 | 23.03.2011 11:19 |
перевод в string из unsigned char | Dimarik | Общие вопросы C/C++ | 5 | 22.03.2011 22:46 |