Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2008, 23:17   #1
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию Задача на С++ [Системы счисления]

Здрасьте усем!
Помогите пожлста
Задача:
Вводим число типа: беззнаковый символ. (0-225) если число <128, то инвертировать младшие четыре бита, если >= - старшие четыре бита.

мне-б функции перевода и конвертации а остальное сам попробую...

не ругайте меня сильно - я в СИ ваще не шарю...
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 28.11.2008, 23:38   #2
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

см. Любой книжко раздел логические операции
a = ~a; // побитовое не
a = a & value; // и
a = a | value; // или

итд.

Последний раз редактировалось ams007; 28.11.2008 в 23:41.
ams007 вне форума Ответить с цитированием
Старый 29.11.2008, 00:01   #3
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

если я правильно понял нужно число переводить в двоичную СС и инвертировать там биты а потом переводить обратно?
фишка в чем: Я НЕ ВКУРЮ КАКИМ ОБРАЗОМ МНЕ ВСЕ ЭТО СДЕЛАТЬ!!!
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 29.11.2008, 00:31   #4
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Представь себе - не надо!

есть 10-я и 16-е формы.

соответственно ->
Код:
BYTE a = 10;// задание значения в  10-й СС
BYTE b = 0xA// в 16-й СС
при этом a тождественно равно b. Мы-то с тобой это точно знаем.

Переменная типа байт м.содержать значения от 0 до 0xFF.
Рассмотрим число 0xAF.
тут A - старшие 4 бита (1010 в 2-й СС) , F - млабшие 4 бита (1111 в 2-й СС ).

тогда
Код:
BYTE a = 0xAF;
BYTE b;

b = a & 0xF0; // b станет равным 0xA0
b = a | 0xF0; // b станет равным 0xFF
b = ~a;        // b станет равным 0x50
Я надеюсь, что понятно то, что число 0xAF и 175 - одно и то же число?

еще есть сдвиги

a = a << 4; //сдвинуть а на 4 разряда влево
a = a >> 3; //сдвинуть а на 3 разряда вправо

Пример твоего задания:
Код:

unsigned char Byte;
unsigned char ByteHigh;
unsigned char ByteLow;
ByteHigh = 0;
ByteLow = 0;

scanf("%d",&Byte);

// это - старшая часть твоего байта
ByteHigh = Byte>>4 & 0x0F;
// это младшая
ByteLow = Byte & 0x0F;

if ( Byte <128 )
{
    // побитовое не даст F в старшей части, убираем этот эффект с пом маски 0x0F
    ByteLow = ~ByteLow & 0x0F;
}
else
{
    ByteHigh = ~ByteHigh & 0x0F;
}
// собрали байт обратно
Byte = ByteHigh<<4 + ByteLow;
ЗЫ: не тестилось, если не налажал - должно работать.

Последний раз редактировалось ams007; 29.11.2008 в 00:36.
ams007 вне форума Ответить с цитированием
Старый 29.11.2008, 00:48   #5
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

господи! - как я далек...
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 29.11.2008, 00:49   #6
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

спасибо тебе! будем разбираться...
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 29.11.2008, 01:01   #7
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

все время получается -11
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 29.11.2008, 01:12   #8
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

Вот весь код:
Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
int main() {
unsigned char Byte;
unsigned char ByteH;
unsigned char ByteL;
ByteH=0;
ByteL=0;
clrscr();
scanf("%d",&Byte);
ByteH=Byte>>4&0x0F;
ByteL=Byte&0x0F;
if (Byte<128) { ByteL=~ByteL&0x0F; }
	      else
	      { ByteH=~ByteH&0x0F; }
Byte=ByteH<<4+ByteL;
printf("%d",&Byte);
getch();
return 0;
}
Все время получается -11
Хорошо не там, где нас нет, а там, где нас еще небыло!!!

Последний раз редактировалось Рустам; 29.11.2008 в 10:25.
Рустам вне форума Ответить с цитированием
Старый 29.11.2008, 15:07   #9
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Код:
printf("%d",&Byte);
а надо

Код:
printf("%d",Byte);
ams007 вне форума Ответить с цитированием
Старый 29.11.2008, 15:30   #10
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Byte=ByteH<<4 + ByteL; - неправильно))) - приоритеты не учел,
надо так :Byte=(ByteH<<4) + ByteL; или Byte=ByteH<<4 | ByteL;

Последний раз редактировалось ams007; 29.11.2008 в 15:34.
ams007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на С++ [Системы счисления] Рустам Общие вопросы C/C++ 1 28.11.2008 23:18
Системы счисления vdv08 Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2008 17:32
Перевод из одной системы счисления в другую Sky_VSUH Помощь студентам 1 28.02.2008 20:18