Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с программой. Рассходятся результаты. 
V
    Опции темы
dvmisha
Дата 18.9.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Есть следующая программа из самоучителя, иллюстрирующая работу побитовых операторов.

// 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;
      
      // выполнение логических операций
      // сначала выполняем унарный оператор NOT
      cout << " Arg1                =0x" << nArg1<<"\n";
      cout << " Arg2                =0x" << nArg2<<"\n";
      cout << " ~Arg1               =0x" << ~nArg1<<"\n";
      cout << " ~Arg2               =0x" << ~nArg2<<"\n";
      
      // Теперь - бинарные операторы
      cout << "nArg1 & nArg2 = ox"
      <<(nArg1 & nArg2)
      << "\n";
      cout << "nArg1 | nArg2 = ox"
      <<(nArg1 | nArg2)
      << "\n";
      cout << "nArg1 ^ nArg2 = ox"
      <<(nArg1 ^ nArg2)
      << "\n";
      
      system("pause");
      return 0;
      }

Результат выполнения программы должен выглядеть следующим образом:
Arg1                         =0x1234
Arg2                         =0xff
~nArg1                     =0xffffedcb
~nArg2                     =0xffffff00
nArg1 & nArg2          =0x34      
nArg1 | nArg2           =0x12ff
nArg1 ^ nArg2          =0x12cb

Однако в результате компиляции и выполнении исходного файла получается следующее:

Arg1                         =0x4660
Arg2                         =0x255
~nArg1                     =0x4294962635
~nArg2                     =0x4294967040
nArg1 & nArg2          =0x52      
nArg1 | nArg2           =0x4863
nArg1 ^ nArg2          =0x4811

Подскажите пожалуйста в чём ошибка?

PM MAIL   Вверх
vinter
Дата 18.9.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



все правильно выводит, тольок в десятичной системе
Код


    // Установка вывода в шестнадцатеричном виде
    cout.setf(ios::hex, ios::basefield);
   


Это сообщение отредактировал(а) vinter - 18.9.2008, 16:59


--------------------
Мой блог
PM MAIL WWW   Вверх
dvmisha
Дата 18.9.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Цитата(vinter @ 18.9.2008,  16:55)
все правильно выводит, тольок в десятичной системе
Код


    // Установка вывода в шестнадцатеричном виде
    cout.setf(ios::hex, ios::basefield);
   

Однако, если убрать эту инструкцию, результат всё равно не такой.
PM MAIL   Вверх
vinter
Дата 18.9.2008, 17:30 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



Цитата(dvmisha @  18.9.2008,  18:23 Найти цитируемый пост)
 результат всё равно не такой.

что значит не такой? все там правильно.

Цитата(dvmisha @  18.9.2008,  18:23 Найти цитируемый пост)
Однако, если убрать эту инструкцию

а если стереть программу, тогда ниче вообще не будет.


--------------------
Мой блог
PM MAIL WWW   Вверх
dvmisha
Дата 18.9.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Как же тогда получился вот такой результат (в книге):
Arg1                         =0x1234
Arg2                         =0xff
~nArg1                     =0xffffedcb
~nArg2                     =0xffffff00
nArg1 & nArg2          =0x34      
nArg1 | nArg2           =0x12ff
nArg1 ^ nArg2          =0x12cb 
PM MAIL   Вверх
vinter
Дата 18.9.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



ОМГ, ты поменял свою строку с 
Цитата(dvmisha @  18.9.2008,  17:09 Найти цитируемый пост)
 cout.setf(ios::hex, ios:: hex);

на 
Цитата(vinter @  18.9.2008,  17:55 Найти цитируемый пост)
 cout.setf(ios::hex, ios::basefield);

?
если в книге написано именно так
Цитата(dvmisha @  18.9.2008,  17:09 Найти цитируемый пост)
 cout.setf(ios::hex, ios:: hex);

то это опечатка. А результат у тебя выводит верный, НО в десятичной системе счисления


--------------------
Мой блог
PM MAIL WWW   Вверх
dvmisha
Дата 18.9.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Цитата(vinter @ 18.9.2008,  17:43)
ОМГ, ты поменял свою строку с 
Цитата(dvmisha @  18.9.2008,  17:09 Найти цитируемый пост)
 cout.setf(ios::hex, ios:: hex);

на 
Цитата(vinter @  18.9.2008,  17:55 Найти цитируемый пост)
 cout.setf(ios::hex, ios::basefield);

?
если в книге написано именно так
Цитата(dvmisha @  18.9.2008,  17:09 Найти цитируемый пост)
 cout.setf(ios::hex, ios:: hex);

то это опечатка. А результат у тебя выводит верный, НО в десятичной системе счисления

Спасибо. Поменял. Всё получилось. В книге действительно опечатка и моя невнимательность после первого ответа. 
PM MAIL   Вверх
vinter
Дата 18.9.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



пометь тему решенной(верхний правый угол)


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1186 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.