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

Тип char.Signed/unsigned.Отличие типов данных. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Контейнеры в Windows http://www.cyberforum.ru/cpp-beginners/thread48852.html
Привет.На лето в институте задавали как практику написать приложение с 2мя контейнерами.Мне попалось со списками.Так вот , условиям выбра во 2ой контейнер данных из 1го является - четность.А я убей не помню, как четные числа выводить...((Помогите плиз)
C++ Ошибка времени выполнения Я пишу проэкт в Visual Studia 2008 на C++. У меня есть несколько проблем. Во-первых, когда я собираю финальную версию (release) и запускаю не выполнение, то появляется ошибка: Unhandled exception at 0x00402330 in chtml.exe: 0xC0000005: Access violation reading location 0x00000000. вот в этом месте int main( int argv, char *argc ) { #if ! LINUX setlocale( LC_ALL, ".1251" ); #endif... http://www.cyberforum.ru/cpp-beginners/thread48827.html
C++ Массивы (С++)
Здраствуйте помогите решить задачку на С++, задача простая а обращаюсь к вам потомучто совсем не знаком с этим языком сформировать массив С из нечетных и массив К - из четных чисел последовательности N(m)={10, 8, 4, 3, 6, 15, 2}, m=7. заранее очень благодарен
подскажите мне соответствующую книгу C++
френды,вот в чем загвоздка я не люблю читать литературу с компа,например в форматах pdf или ещё хуже DJVU у меня просто не приспособлены для этого мозги...я люблю читать реальные книги на бумаге...это уже научно доказано,что такая литература лучше усваивается,нежели литература с компа я прочитал в бумажном варианте книгу Стивена Холзнера Самоучитель Visual c++.Учебный курс книга...
C++ Что означают параметры %d, %s, %f и т.д.? http://www.cyberforum.ru/cpp-beginners/thread48806.html
Появилась проблема с выводом переменных в MessageBox. В MSDN нарыл это: #include <stdio.h> int main( void ) { char buffer, s = "computer", c = 'l'; int i = 35, j; float fp = 1.7320534f;
C++ Задача "Кузнечик" Помогите решить в С++ задачу про цифрового кузнечика: имеется линейный массив из 20 чисел 1,2,3,4...20. По нём может прыгать кузнечик скачками по 2 и по 3 клетки. Нужно создать программку, которая считает сколько есть вариантов у кузнечика попасть из клетки 0 на клетку 20. Использовать цикл "for"... подробнее

Показать сообщение отдельно
Kastaneda
Форумчанин
Эксперт С++
4261 / 2793 / 219
Регистрация: 12.12.2009
Сообщений: 7,120
Записей в блоге: 1
Завершенные тесты: 1
08.11.2010, 11:20     Тип char.Signed/unsigned.Отличие типов данных.
Цитата Сообщение от norge_goth Посмотреть сообщение
то есть, как я понимаю компилятор ставит какой-то признак что число беззнаковое или знаковое и использует этот признак когда нужно перевести в 10-ную систему счисления?
еще вопрос - этот признак это просто бит? и где он храниться?
Компилятор просто (ну то есть не совсем просто)) гененрирует ассемблерный код, а там уже за знак овечает флаг SF (signed flag) (флаг - это отдельный бит в регистре флагов) и вычесления уже зависят от того - выставлен ли этот флаг. К слову сказать SF устанавливается всегда, когда старший бит равен 1, например:
C
1
2
3
unsigned char a=100;
unsigned char b=28;
unsigned char c=a+b;
результатом будет c=128 (что в двоичном виде 10000000), казалось бы мы оперируем с беззнаковым типом, но флаг SF все равно будет равен 1 (старший бит же 1), т.е. как будто результат "-128" . И тут встает вопрос :" Что за бред, как процессор вообще определяет где число со знаком, а где без?", ответ:" НИКАК"! Процессор вообще не знает, что такое знак числа, он просто вычесляет то, что в него сунули, при этом результат в шестнадцатиричном виде все равно будет правильный как для положительного, так и для отрицательного числа) А для вывода на экран "знаковых отрицательных" чисел используется дополнительный код (за его существование уже ответственен компилятор, который считывает текстовый файл исходника и видит, что число со знаком, и добавляет тот самый код)
Вот, вроде объяснил) Если что не понятно, спрашивайте!

Добавлено через 5 минут
про дополнительный код:
не буду приводить код на АСМе, вот его суть на C :
C
1
2
3
4
// на это месте уже программа уже знает, что речь идет о "знаковом" числе
if (SF==1)
   printf("-");
//а далее простой перевод из HEX в DEC
т.е. знак "-", который мы видем на экране - это всего лишь отдельно напечатанный символ '-' и не более того.
 
Текущее время: 19:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru