Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Битовые операции, С++ результат в bool, С - ? 
:(
    Опции темы
andrew_121
Дата 27.8.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Есть код на С++
Код

bool bit;
unsigned short curcode=0;
...
bit = curcode & 0x8000; // самый старший бит.

Я переписал этот код для С:
Код

unsigned int bit;
unsigned short curcode=0;
...
bit = curcode & 0x8000; // самый старший бит.

Но результат не верен. В чем проблема?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Sartorius
Дата 27.8.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



чего получилось то?
лучше имхо так. Для замены bool
Код

unsigned int bit;
unsigned short curcode=0;
...
bit = (curcode & 0x8000) != 0; // самый старший бит.


Это сообщение отредактировал(а) Sartorius - 27.8.2008, 17:58
PM MAIL ICQ   Вверх
andrew_121
Дата 27.8.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Sartorius, Спасибо помогло!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 27.8.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



И еще вопрос:
В С++
Код

FILE* f;
UCHAR CurByte=0;//работает как буффер
UCHAR CurBit=8;//чтобы при первом прочтении

bool Read1Bit() {
    if(CurBit==8) {
        ReadByte();
        CurBit=0;
    }
    return CurByte&(1<<(7-(CurBit++)));

}

void AddBit(long &l) { //читает один бит и добавляет его справа к l
    l<<=1;
    l+=Read1Bit();
}

long ReadBits(UCHAR NumBits) { //читает NumBits битов из файла
    long l=0;
    for(UCHAR i=0;i<NumBits;i++)
        AddBit(l);
    return l;
}

Проблема с функцией Read1Bit()
Как поправиь код для С ?

Это сообщение отредактировал(а) andrew_121 - 27.8.2008, 19:03


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 27.8.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



может так ?
return ( CurByte&(1<<(7-(CurBit++))) !=0)? true:false;



--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 27.8.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



mes, Нет. Проблема в том что функция возвращает bool. А в С, нет такого типа.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 27.8.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(andrew_121 @  27.8.2008,  19:19 Найти цитируемый пост)
mes, Нет. Проблема в том что функция возвращает bool. А в С, нет такого типа. 


unsigned int  Read1Bit() { ...   return CurByte&(1<<(7-(CurBit++))) != 0; }

Добавлено через 6 минут и 49 секунд
или
unsigned int  Read1Bit() { ...   return (CurByte>>(7-(CurBit++))&1) ; }


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 28.8.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



<удалено>

Это сообщение отредактировал(а) Alek86 - 28.8.2008, 09:56


--------------------
user posted image    user posted image
PM MAIL   Вверх
andrew_121
Дата 28.8.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



mes, Блин... Что-то неверно. Есть варианты?



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
UnrealMan
Дата 28.8.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(andrew_121 @  27.8.2008,  20:19 Найти цитируемый пост)
Проблема в том что функция возвращает bool. А в С, нет такого типа. 

В C99 предусмотрены стандартные макросы для bool, true и false, которые определены в stdbool.h

Цитата(andrew_121 @  28.8.2008,  12:36 Найти цитируемый пост)
mes, Блин... Что-то неверно. Есть варианты?

Просто кому-то надо выучить приоритеты операций. Правильно будет

Код

return ( CurByte&(1<<(7-(CurBit++))) ) != 0;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.