Форум программистов, компьютерный форум 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... http://www.cyberforum.ru/cpp-beginners/thread48827.html
C++ Массивы (С++)
Здраствуйте помогите решить задачку на С++, задача простая а обращаюсь к вам потомучто совсем не знаком с этим языком сформировать массив С из нечетных и массив К - из четных чисел...
подскажите мне соответствующую книгу C++
френды,вот в чем загвоздка я не люблю читать литературу с компа,например в форматах pdf или ещё хуже DJVU у меня просто не приспособлены для этого мозги...я люблю читать реальные книги на...
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 =...
C++ Задача "Кузнечик" Помогите решить в С++ задачу про цифрового кузнечика: имеется линейный массив из 20 чисел 1,2,3,4...20. По нём может прыгать кузнечик скачками по 2 и по 3 клетки. Нужно создать программку, которая... подробнее

Показать сообщение отдельно
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
08.11.2010, 11:20
Цитата Сообщение от 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
т.е. знак "-", который мы видем на экране - это всего лишь отдельно напечатанный символ '-' и не более того.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru