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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 17:09   #1
Sianukvil
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию Проверка установленности 0-го бита

Здравствуйте.
Дан файл input.txt:
Код:
1011010110101100
Есть следующие описания:
Код:
int mes[8];        //Элементы содержат биты для формирования из них байта
int fsize2;          //Длина файла input.txt
int ts = fsize2%8; //Остаток
fp2 = fopen("input.txt", "r");
unsigned char tch, mask, mask1;
И код:
Код:
        j=0;
	for(i=0;i<fsize2-ts;i++)
	{
		mes[j]=fgetc(fp2);
		if(j==7)
        {      
			for(;j >= 0; j--)
			{
				if((mes[7-j] - '0') == 0) tch = tch&(~(1<<j));  //0, устанавливаем j-ый бит в 0
				else tch = tch|(1<<j);                                 //1, устанавливаем j-ый бит в 1
			}

                        //----------------------------------------------

			mask = tch;
			
			for(k1 = 7; k1 >= 0; k1--)
			{
				mask1 = mask&(1<<k1);
				if(mask1 == 0)     //т.е k1-ый бит - 0
				{
					printf("0");
				}
				else                 //k1-ый бит - 1
				{
					printf("1");
				}
			}
			
			j=0;
        }
        j++;    
	}
Суть: имеется файл с двоичным кодом. В первой части до разделительного коммента мы из восьмерок из 0 и 1 формируем байт(установливаем соответственно биты tch). Далее tch пишется в файл, но эту часть я опустил, т.к она не важна. После разделительного комментария мы делаем обратный процесс - байт разлагаем на биты.
Но 2-ая часть работает неправильно: выводится 1011010111010110, что не совпадает с исходным кодом. Но если условие в заголовке цикла изменить на строгое нер-во: k1 > 0, то вывод чуть лучше: 10110101101011, 14 из 16 исходных бит совпадают.
Основное подозрение - как-то криво проверяются 0-ые(младшие) биты байта.
Ничего не понятно, будьте добры, помогите

Последний раз редактировалось Sianukvil; 01.06.2010 в 17:13.
Sianukvil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Число размером 1024 бита. ImmortalAlexSan Общие вопросы Delphi 1 16.04.2010 12:54
Битовые операции: как узнать значение отдельного бита? phobos Общие вопросы C/C++ 5 30.04.2009 09:31
C++ получение конкретного бита... SNUPY Помощь студентам 2 26.03.2009 18:50
язык Си, задача - переводим в 16-й код, старшие три бита интерпретируем как некое число n drossel Помощь студентам 5 02.03.2008 17:24
Замена второго бита в числе SZR Помощь студентам 4 25.01.2008 20:16