С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Тип 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
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
09.11.2010, 10:51
Цитата Сообщение от norge_goth Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
if (word_1 < 0) доп.код(word_1); // если перед числом есть минус берем доп.код
if (word_2 < 0) доп.код(word_2); // если перед числом есть минус берем доп.код
ch = word_1 + word_2;
if (Type(ch) == signed) {
      if (SF == 1) {
             printf("-");
             printf(toDec(доп.код(ch)));
      }
      else printf(toDec(ch));
}
else printf(toDec(ch));
Нет, не так. Доп.код про который я писал нужен лишь для вывода числа на экран (ну или куда там). Соответственно в этих строках он не нужен:
C
1
2
if (word_1 < 0) доп.код(word_1); // если перед числом есть минус берем доп.код
if (word_2 < 0) доп.код(word_2); // если перед числом есть минус берем доп.код
два байта и так правильно суммируются, не зависимо от знака (точнее они вообще знака не имеют, об этом писалось выше)
C
1
2
3
4
5
if (Type(ch) == signed) {
      if (SF == 1) {
             printf("-");
             printf(toDec(ch));//почему у вас тут было написано доп.код??
      }
может вы не совсем поняли что есть доп.код?
вот как это выгдядет на ассемблере (создатели компиляторов закладывают подобный код для вывода чисел, ну может более проффесионально написан, хотя этот тоже не плох)
Assembler
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
OutInt proc
        
;; Проверяем число на знак.
       test    ax, ax
       jns     oi1 ; если флаг SF равен 0, то прыг на метку oi1
 
;; Если оно отрицательное, выведем минус и оставим его модуль.
       mov  cx, ax
       mov     ah, 02h
       mov     dl, '-'  ; Вот о чем я говорил, символ '-' печатается отдельно 
                        ;и не имеет отношения  к самому числу
       int     21h
       mov  ax, cx
       neg     ax
;; Количество цифр будем держать в CX.
oi1:  
        xor     cx, cx
        mov     bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
        xor             dx,dx
        div     bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стэке.
        push    dx
        inc     cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
        test    ax, ax
        jnz     oi2
; Теперь приступим к выводу.
        mov     ah, 02h
oi3:
        pop     dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
 
        add     dl, '0'
        int     21h
; Повторим ровно столько раз, сколько цифр насчитали.
        loop    oi3
        
        ret
 
OutInt endp 
 
;код взят здесь : [url]http://www.cyberforum.ru/assembler/thread54461.html[/url]
Автор кода (Goodwin98) по-моему достаточно прокоментировал его, даже не зная АСМа можно понять логику его работы, я там только пару своих коментариев добавил. (строка 5,10)
Если еще остались вопросы - спрашивайте, отвечу (если смогу)))
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.