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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 12:53   #1
bipbapboo
Новичок
Джуниор
 
Регистрация: 26.03.2012
Сообщений: 4
По умолчанию Написать программу на С++. Работа с битами.

Инвертировать все биты в старшем байте числа. Нельзя использовать структурированные типы данных. Ввод и вывод информации должны быть в 16ричной системе.
bipbapboo вне форума Ответить с цитированием
Старый 26.03.2012, 13:31   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Есть наработки?
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 26.03.2012, 13:41   #3
bipbapboo
Новичок
Джуниор
 
Регистрация: 26.03.2012
Сообщений: 4
По умолчанию

нет, к сожалению
bipbapboo вне форума Ответить с цитированием
Старый 26.03.2012, 16:10   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Да, грустно....
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 26.03.2012, 16:52   #5
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Код:
#include <iostream>

int main()
{
	unsigned int number;
	number = 0x87654321;
	std::cout << std::hex << std::showbase << number << std::endl;

	//Получаем старший байт
	unsigned char high_byte;
	high_byte = ((number << (2 * 8)) >> (3 * 8));

	//Применяем команду not
	high_byte = ~high_byte;

	//Пишем в старший байт переменной number
	*(reinterpret_cast<unsigned char*>(&number) + 1) = high_byte;

	std::cout << std::hex << std::showbase << number << std::endl;

    return 0;
}
<< и >> делаем смещение битов (shl, shr).
&number - адрес переменной в памяти.

Ссылки по теме:
codenet.ru/progr/asm/newbee/lesson8.php
en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

Последний раз редактировалось zotox; 26.03.2012 в 16:55.
zotox вне форума Ответить с цитированием
Старый 26.03.2012, 19:58   #6
bipbapboo
Новичок
Джуниор
 
Регистрация: 26.03.2012
Сообщений: 4
По умолчанию

ругается на 7 и 19 строчки
пишет для обоих :
'end' is not a member of 'std'
expected primary-expression before ';' token
bipbapboo вне форума Ответить с цитированием
Старый 26.03.2012, 20:52   #7
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от bipbapboo Посмотреть сообщение
ругается на 7 и 19 строчки
пишет для обоих :
'end' is not a member of 'std'
expected primary-expression before ';' token
А в коде ничего не изменяли? (разница между end и endl для кого то может показаться не существенной )
zotox вне форума Ответить с цитированием
Старый 26.03.2012, 21:08   #8
bipbapboo
Новичок
Джуниор
 
Регистрация: 26.03.2012
Сообщений: 4
По умолчанию

хм ) видимо изменила нечаенно
только почему то на семерке не запускается файлик. завтра надо будет в универе проверить
спасибо =)
bipbapboo вне форума Ответить с цитированием
Старый 27.03.2012, 15:59   #9
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

2zotox, что-то не срастается....


Код:
// это работает при порядке от младшего к старшему
	 // проверить можно так
	// unsigned short x = 1; /* 0x0001 */
	//  printf("%s\n", *((unsigned char *) &x) == 0 ? "старшего к младшему" : "младшего к старшему");


unsigned int number = 0x87654321;
	// старший байт = 0x21   bin(00100001)
	// инверт = 0хDE         bin(11011110)
	std::cout << std::hex << std::showbase << number << std::endl;
	 
	//Получаем старший байт
	unsigned char high_byte = (number << 5)>>5;//(0х21)
	//Применяем команду not
	high_byte = ~high_byte;//(0хDE)
	//Пишем в старший байт переменную number
	*((char*)&number) = high_byte;// старший байт -  в начале инта в памяти на базе процессоров Intel
	std::cout << std::hex << std::showbase << number << std::endl;
	return 0;
или одной строкой
Код:
*((char*)&number) = ~((number << 5)>>5);
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 27.03.2012 в 16:05.
Krok27 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с битами codermoder Общие вопросы C/C++ 2 18.11.2011 06:25
Работа с битами Slippik Общие вопросы C/C++ 2 24.10.2010 20:41
Работа с битами. Masip Общие вопросы Delphi 2 13.04.2010 13:03
Работа с битами viktory Помощь студентам 8 02.10.2009 18:33
Работа с битами kesha2008 Общие вопросы C/C++ 2 24.02.2009 12:05