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

  • Автор темы aZa9
  • Дата начала
A

aZa9

Гость
#1
Занимаюсь по книге "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
Может ли это быть связанно с потоками вывода?
Подскажите в чем может быть загвоздка.
С уважением,
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
По-умолчанию cout выводит значения в десятеричной системе счисления.
Для того, чтобы переключиться на 16-ричную тебе надо вставить hex, т.е. например:

cout << 0x1234 << endl; выведет 4660, а
cout << hex << 0x1234 << endl; выведет 1234