#include <math.h>
#include <stdio.h>
int main()
{
unsigned char c=0;
int array[8]={0,0,0,1,0,1,0,0};
int i;
for (i=7; i>=0; i--)
{
if (array == 1)
{
c = c | (int)pow(2,i);
}
}
printf("%d\n",(int) c);
}
Биты и байты
Как сохранить 8 знаков (0 или 1) в файл с размером 1 байт:confused:
при помощи логических операций. берешь байт. изначально все его биты равны нулям. перебираешь знаки. если знак равен 0, нчиего не трогаешь. если 1 - делаешь AND соответствующего разряда.
Что такое АНД?Какие функции записи в файл использовать?Я пробовал fwrite - минимум один знак ето один байт ,а мне нужно один бит
2. тебе и надо байт записывать. сначала ты его обрабатываешь, затем записываешь в файл. или тебе код надо?
:eek:
Если ты не знаешь, что такое AND:confused: , как ты это собираешься сделать. Учись думать сам, а на подобных сайтах ищи подсказки, если конешно хочеш чему-нибуть научиться;)
не флуди, если ты не можеш помочь не мешай (В книгах нет - где ж еще искать)
squirL
1. AND - операция логического ИЛИ.
2. тебе и надо байт записывать. сначала ты его обрабатываешь, затем записываешь в файл. или тебе код надо?
Помоему хватит каплю подумать, если умеешь и посмотреть в КНИГЕ. Ссылки на тематику:
-Логические операции AND(логическое и), OR(логическое или), NOT(отрицание).
"Google"ом или "Яндекс"ом надеюсь пользоваться умеешь.
А далее с помощью этих операций упаковываешь свои матрицы по 8 значений в байт.
А как не объясняй не поймешь.
2Модератору:
За оскорбление не считать, проверьте мою личку.
squirL
1. AND - операция логического ИЛИ.
[/QUOTE]
Поржаль! :D
Ваще-то AND - это логическое И
Ваще-то AND - это логическое И[/quote]
мля... в натуре, каюсь. думал об одном, написал другое. камраду OR надо.
Для более конкретной информации напиши в поисковике "запись в двоичный фаил"... Почитай хелпу о функцие _wfopen
Ему для начала нужно объяснить, что записать в файл он может минимум байт. И ему нужно свои матрицы упаковать в эти байты, а затем выводить. Для упаковки точно, так же каюсь не обратил внимания нужно использовать OR. Вместо байтов можно использовать и более длинные структуры.
Но, что делать если человеку говорят использую "или", а он говорит "ЧТО ЭТО?". В форуме не столько много места, чтобы прочитать лекцию по дискретке. Здесь только подсказки. Он должен был хотя бы немного постараться, подумать, поискать. Все с неба не валится
OR - было последней каплей...
Лучшеб он не спрашивал... :)
Парню код нужен, а не ваши умные советы.
Я ничем помочь не могу... только советами... :D
а чем тебя OR не устраивает?
Ему для начала нужно объяснить, что записать в файл он может минимум байт. И ему нужно свои матрицы упаковать в эти байты, а затем выводить. Для упаковки точно, так же каюсь не обратил внимания нужно использовать OR. Вместо байтов можно использовать и более длинные структуры.
Но, что делать если человеку говорят использую "или", а он говорит "ЧТО ЭТО?". В форуме не столько много места, чтобы прочитать лекцию по дискретке. Здесь только подсказки. Он должен был хотя бы немного постараться, подумать, поискать. Все с неба не валится[/QUOTE]
1.-Мне не надо обяснять что такое лог. операции (я с ними знаком) просто литература оперирует русскими абревиатурами, а не английскими как вы!!!
2.(Green-у)-Готовый программный код мне не нужен, поетому не надо бла-бла.
3.-Упаковывать 8 символов в один байт идея была но проблема в том что сохранить в файл (главная цель),даже двоичный, можна минимум один символ-1 байт.И всякие там чары а не инты не помогают:(
Как сохранить 8 знаков (0 или 1) в файл с размером 1 байт
[/QUOTE]
[QUOTE=pashaelektron]
3.-Упаковывать 8 символов в один байт идея была
[/QUOTE]
Гениально.
[QUOTE=pashaelektron]
но проблема в том что сохранить в файл (главная цель),даже двоичный, можна минимум один символ-1 байт.
[/QUOTE]
Я не просто так везде выделил "один байт".
Ты сам описал последовательность действий.
Так в чем проблема?
[QUOTE=pashaelektron]И всякие там чары а не инты не помогают:(
[/QUOTE]
Ты их упрашивал?
C
Код:
#include <stdio.h>
#define N 8
int main(void)
{
int arr[] = {1,0,0,1,1,0,1,0};
unsigned char c = 0, mask = 128;
int i, j = N-1;
/* упаковка 8 символов (1 or 0) в 1 баит */
for(i = 0; i < N; i++,j--)
if(arr)
c = c | (arr << j);
//расспаковка байта
while(mask)
{
if( c & mask) printf("1 ");
else printf("0 ");
mask >>= 1;
}
return 0;
}
#define N 8
int main(void)
{
int arr[] = {1,0,0,1,1,0,1,0};
unsigned char c = 0, mask = 128;
int i, j = N-1;
/* упаковка 8 символов (1 or 0) в 1 баит */
for(i = 0; i < N; i++,j--)
if(arr)
c = c | (arr << j);
//расспаковка байта
while(mask)
{
if( c & mask) printf("1 ");
else printf("0 ");
mask >>= 1;
}
return 0;
}
ну или я вообще не поняла что тебе надо, если что непинаться
Готовый программный код ему не нужен, поетому не надо бла-бла. :D
ну так объясни что ему нужно, вместо кривляться: бла-бла
Цитата:
3.-[COLOR=red]Упаковывать 8 символов в один байт идея была [/COLOR]но проблема в том что сохранить в файл (главная цель),даже двоичный, [COLOR=blue]можна минимум один символ-1 байт.[/COLOR]
если честно понять такое с моим образованием трудно, а можно выразиться попроще и попонятней в чем проблема.
вроде изначально говорил что проблема как упакавать 8 чисел в один баит, а сейчас в чем?
Цитата:
И всякие там чары а не инты не помогают
не помагают в чем?
Код:
int x[16][16];
// ...
// ...
// "Сжатие"
int *px = &x[0][0];
unsigned int y[8];
for(int i = 0; i<8; i++)
{
unsigned int b = 0;
unsigned int pwr = 0x80000000;
for(int j = 0; j < 32; j++)
{
if(*px==1)b|=pwr;
px++;
pwr>>=1;
}
y = b;
}
// Запись
DWORD dwRW;
HANDLE f = CreateFile("C:\\binary.f", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
WriteFile(f, y, 32, &dwRW, 0);
CloseHandle(f);
// ...
// ...
// "Сжатие"
int *px = &x[0][0];
unsigned int y[8];
for(int i = 0; i<8; i++)
{
unsigned int b = 0;
unsigned int pwr = 0x80000000;
for(int j = 0; j < 32; j++)
{
if(*px==1)b|=pwr;
px++;
pwr>>=1;
}
y = b;
}
// Запись
DWORD dwRW;
HANDLE f = CreateFile("C:\\binary.f", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
WriteFile(f, y, 32, &dwRW, 0);
CloseHandle(f);
Код:
DWORD dwRW;
int x[16][16];
int *px = &x[0][0];
int y[8];
// Чтение
HANDLE f = CreateFile("C:\\binary.f", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
ReadFile(f, y, 32, &dwRW, 0);
CloseHandle(f);
// "Распаковка"
for(int i = 0; i<8; i++)
{
unsigned int b = y;
unsigned int pwr = 0x80000000;
for(int j = 0; j < 32; j++)
{
if((pwr&b)!=0)
*px = 1;
else
*px = 0;
pwr = pwr>>1;
px++;
}
}
int x[16][16];
int *px = &x[0][0];
int y[8];
// Чтение
HANDLE f = CreateFile("C:\\binary.f", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
ReadFile(f, y, 32, &dwRW, 0);
CloseHandle(f);
// "Распаковка"
for(int i = 0; i<8; i++)
{
unsigned int b = y;
unsigned int pwr = 0x80000000;
for(int j = 0; j < 32; j++)
{
if((pwr&b)!=0)
*px = 1;
else
*px = 0;
pwr = pwr>>1;
px++;
}
}
Типа тупо ему отвечают.
Так что, товарисчи - что ж вы тупите? Не хорошо - человеку книги читать лень - а выему все никак не ответите - вон сколько тянули. Да еще и англискими абревиатурами оперируете. Как не стыдно. ;)
По поводу темы - отправляю ее к студентам.
Типа тупо ему отвечают.
Так что, товарисчи - что ж вы тупите? Не хорошо - человеку книги читать лень - а выему все никак не ответите - вон сколько тянули. Да еще и англискими абревиатурами оперируете. Как не стыдно. ;)
[COLOR=red]По поводу темы - отправляю ее к студентам.[/COLOR][/quote]
Почему именно в Студенты(я возмущена :) !), можно в раздел Отдохнем в конце концов
что за глюки с quote? у меня такое же было с ЛС
Типа тупо ему отвечают.
Так что, товарисчи - что ж вы тупите? Не хорошо - человеку книги читать лень - а выему все никак не ответите - вон сколько тянули. Да еще и англискими абревиатурами оперируете. Как не стыдно. ;)
[COLOR=red]По поводу темы - отправляю ее к студентам.[/COLOR][/quote]
Почему именно в Студенты(я возмущена :) !), можно в раздел Отдохнем в конце концов[/QUOTE]
Надо отдельную тему создать - назвать ее типа помойки :) (ну или может как то более приглядно) - и туда сбрасывать. А то честно говоря я просто по критерию, обнаковенный лентяй - обычно нормальный студент.
З.Ы. У тебя в тег цитаты влез тег цвета - потому и заглючило.
Код:
byte b[8];
DWORD dwRW;
HANDLE f = CreateFile("C:\\binary.f", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
WriteFile(f, b, 8, &dwRW, 0);
CloseHandle(f);
DWORD dwRW;
HANDLE f = CreateFile("C:\\binary.f", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
WriteFile(f, b, 8, &dwRW, 0);
CloseHandle(f);