Битовые операции

Есть код на С++
bool bit;unsigned short curcode=0;...bit = curcode & 0x8000; // самый старший бит.
Я переписал этот код для С:
unsigned int bit;unsigned short curcode=0;...bit = curcode & 0x8000; // самый старший бит.
Но результат не верен. В чем проблема?
9 ответов

чего получилось то?лучше имхо так. Для замены bool
unsigned int bit;unsigned short curcode=0;...bit = (curcode & 0x8000) != 0; // самый старший бит.


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


И еще вопрос:В С++
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()Как поправиь код для С ?


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


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


mes, Нет. Проблема в том что функция возвращает bool. А в С, нет такого типа. 
unsigned int  Read1Bit() { ...   return CurByte&(1<<(7-(CurBit++))) !=0; }Добавлено через 6 минут и 49 секундилиunsigned int  Read1Bit() { ...   return (CurByte>>(7-(CurBit++))&1) ; }


<удалено>


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


Проблема в том что функция возвращает bool. А в С, нет такого типа. 
В C99 предусмотрены стандартные макросы для bool, true и false, которые определены в stdbool.h
mes, Блин... Что-то неверно. Есть варианты?
Просто кому-то надо выучить приоритеты операций. Правильно будет
return ( CurByte&(1<<(7-(CurBit++))) ) != 0;