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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2014, 07:54   #1
Twixs
Новичок
Джуниор
 
Регистрация: 14.04.2014
Сообщений: 1
По умолчанию Сложная задача

Начиная с адреса А в памяти МК находятся N записей длиной k бит каждая. Записи выровнены по границе слова. Написать функции для чтения/записи отдельных бит для любой записи из данного набора.

1-слово = 4-байта = 32бита
вопрос вот в чём как сделать длину записи например не стандартно 32 а допустим 33 бита или 37бит?
и какие для этого использовать операции?


у меня вот что получилось, но это не совсем правильно:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cmath>

//extern char tim(char s9[100], int OldSize, int NewSize);

extern void _WRITE_MASK1();
extern void _WRITE_MASK2();
extern void _WRITE_BIT(long *j, int num_z, int num_byte, int num_bite, int _vol);
extern int _READ_BIT(long *j, int num_z, int num_byte, int num_bite);

#define N 1 // Ввод кол-ва записей по 4 байта.
int main()
{
int K=32; // Ввод кол-ва битов в каждой записи( от 1 до 32 )
int Z=K-1;
if((K<1)||(K>32))
{
return 0;
}

unsigned long mass [N];
for(int i=0; i<N; i++) // формирование битов длиной К.
{
if(Z<2)
mass[i]=pow(2,Z);
if ((Z>=3)&(Z<10))
mass[i]=pow(2,Z)+pow(2,Z-1)+pow(2,Z-2)+1;
if ((Z>=10)&(Z<20))
mass[i]=pow(2,Z)+pow(2,Z-2)+pow(2,Z-4)+pow(2,Z-6)+pow(2,Z-8)+i;
if ((Z>=20)&(Z<32))
mass[i]=pow(2,Z)+pow(2,Z-4)+pow(2,Z-8)+pow(2,Z-12)+pow(2,Z-16)+i;
}


_WRITE_MASK1();
_WRITE_MASK2();
int rtf =1; // 0 или 1
int bit=1; // от 0 до 7
int byte=3; ; // от 0 до 3
int zap=4; // от 0 до кол-ва записей -1
int k=(sizeof(mass))/sizeof(mass[0]); // определение кол-ва элементов
if(((bit>7)||(bit<0)||(byte>3)||(byte<0)||(zap<0)||(zap>k-1))||((rtf!=0)&(rtf!=1)))
{
return 0;
}
_WRITE_BIT(&mass[0],zap,byte,bit,rtf); //zap от 0 до размера массива-1; byte от 0 до 4, бит от 0 до 7. УСТАНАВЛИВАЕМ В ПАМЯТИ БИТ, РАВНЫЙ ЗНАЧЕНИЮ RTF
int bitRead=1; // от 0 до 7
int byteRead=3;// от 0 до 3
int zapRead=4;// от 0 до кол-ва записей -1
if((bitRead>7)||(bitRead<0)||(byteRead>3)||(byteRead<0)||(za pRead<0)||(zapRead>k-1))
{
return 0;
}
int b = _READ_BIT(&mass[0],zapRead,byteRead,bitRead);
int c=10;
}

Последний раз редактировалось Stilet; 14.04.2014 в 08:09.
Twixs вне форума Ответить с цитированием
Старый 14.04.2014, 08:52   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
1-слово = 4-байта = 32бита
1 слово (word)= 2 байта =16 бит.
32 бита - это двойное слово (dword)
Цитата:
вопрос вот в чём как сделать длину записи например не стандартно 32 а допустим 33 бита или 37бит?
Вот эта строка (даже с комментарием) случайно ни на что не намекает?
Цитата:
Код:
int K=32; // Ввод кол-ва битов в каждой записи( от 1 до 32 )
Streletz вне форума Ответить с цитированием
Старый 14.04.2014, 10:18   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Streletz
Цитата:
1 слово (word)= 2 байта =16 бит.
во-первых, размер слова зависит от платформы.
во-вторых, на x86 реальный размер машинного слова 4 байта (2 байта - исторически)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 14.04.2014, 15:40   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Вот эта строка (даже с комментарием) случайно ни на что не намекает?
В-третьих, не получится изменением этой строчки замутить 33 бита
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложная задача Paster Fob Паскаль, Turbo Pascal, PascalABC.NET 9 16.05.2012 16:48
Сложная задача! Pashok6 Паскаль, Turbo Pascal, PascalABC.NET 10 02.01.2012 00:03
сложная задача!( sergsergserg Помощь студентам 1 09.11.2011 18:47
Сложная задача. ВДПУ Помощь студентам 4 07.11.2011 22:34
Сложная задача asale Microsoft Office Excel 6 07.04.2009 20:36