1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Ошибки при компиляции

Тема в разделе "С и С++", создана пользователем aZa9, 28 июн 2011.

  1. aZa9

    aZa9 Гость

    Репутация:
    0
    Занимаюсь по книге "C++ для чайников".

    Написал следующую программу по этой же книге:

    //BitTest - инициируются две переменные и
    // выводятся результаты выполнения
    // операторов ~, &,| и ^

    #include <cstdio>
    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int nArg, char* pszArgs[])
    {
    // установка вывода в шестнадцатеричном виде
    cout.setf(ios::hex, ios::hex);
    //инициализация двух аргументов
    int nArg1 = 0x1234;
    int nArg2 = 0x00ff;

    // Выполнение логических операций
    cout << "Arg1 = 0x" << nArg1 << "\n";
    cout << "Arg2 = 0x" << nArg2 << "\n";
    cout << "~nArg1 = 0x" << ~nArg1 << "\n";
    cout << "~nArg2 = 0x" << ~nArg2 << "\n";

    // Бинарные операторы
    cout << "nArg1 & nArg2 = 0x"
    << (nArg1 & nArg2)
    << "\n";
    cout << "nArg1 | nArg2 = 0x"
    << (nArg1 | nArg2)
    << "\n";
    cout << "nArg1 ^ nArg2 = 0x"
    << (nArg1 ^ nArg2)
    << "\n";


    system("PAUSE");
    return 0;
    }


    К сожалению, после компиляции программа выводит на экран совершенно посторонние значения.
    Должно было выводиться:
    Arg1 = 0x1234
    Arg2 = 0xff
    ~nArg1 = 0xffffedcb
    ~nArg1 = 0xffffff00
    nArg1 & nArg2 = 0x34
    nArg1 | nArg2 = 0x12ff
    nArg1 ^ nArg2 = 0x12cb

    а вместо этого программа выводит:
    Arg1 = 0x4660
    Arg2 = 0x255
    ~nArg1 = 0x4294962635
    ~nArg1 = 0x4294967040
    nArg1 & nArg2 = 0x52
    nArg1 | nArg2 = 0x4863
    nArg1 ^ nArg2 = 0x4811

    ОС Win7
    Может ли это быть связанно с потоками вывода?
    Подскажите в чем может быть загвоздка.
    С уважением,
     
  2. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    По-умолчанию cout выводит значения в десятеричной системе счисления.
    Для того, чтобы переключиться на 16-ричную тебе надо вставить hex, т.е. например:

    cout << 0x1234 << endl; выведет 4660, а
    cout << hex << 0x1234 << endl; выведет 1234
     
Загрузка...

Поделиться этой страницей