есть фрагмент кода:
struct status_type {
unsigned delta_cts: 1;
unsigned delta_dsr: 1;
unsigned tr_edge: 1;
unsigned delta_rec: 1;
unsigned cts: 1;
unsigned dsr: 1;
unsigned ring:1;
unsigned rec_line:1;
} status;
вопрос такой : Что же обозначает спецификатор "unsigned", при условии что у нас не указан тип данных переменной ?
1 сентября 2009 в 22:05
>> так ведь инт по умолчанию принимает 4 байта..
не совсем так. int нынче бывает разный – от двух до восьми байт.
>> по умолчанию если проглатывает то точно int, также и функции если не указан тип или void то считается что int, но все ли трансляторы это съедят…
должны съесть, куда они денутся? может просто дополнительные флаги в командной строке им надо будет указать.
>> и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?
не факт (в приведенном примере – принадлежат одному). да и какая вам разница? есть же sizeof.
1 сентября 2009 в 21:02
>> вопрос такой : Что же обозначает спецификатор "unsigned", при условии что у нас не указан тип данных переменной ?
Вполне возможно, что да (не помню точно ). Читайте доки по поводу выравнивания. Также можно просто проверить оператором sizeof (правда, если он есть в си не знаю) или скастовав указатель на структуру к чару и, присвоив ей какое-нить значение (чар естественно), посмотреть, что поменялось.
#10 Читаем внимательно:
unsigned delta_cts: 1;
1 сентября 2009 в 10:04
стандартов много(в смысле хронологически менялся стандарт существенно), по умолчанию если проглатывает то точно int, также и функции если не указан тип или void то считается что int, но все ли трансляторы это съедят… лучше не экономить чары и явно прописать инты, оно и красивей.
1 сентября 2009 в 10:04
"так ведь инт по умолчанию принимает 4 байта.."
нифига!это где как, в 32-ух битных системах обычно да, в 16 это 16 бит (именно "обычно" читайте документацию вашего транслятора, это очень неприятная ошибка часто возникающая при переносе по с одной железки на другую по числу байтов в типе, также, кстати, не стандартизован порядок байт в инте, обычно он привязан к машине(что логично ибо при каждой операции дважды переставлять байты…) от того и нужны макросы htons и т.п.)
"и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?"
как вы это задали?
1 сентября 2009 в 10:01
так ведь инт по умолчанию принимает 4 байта..
и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?
1 сентября 2009 в 7:00
Да-да, то же относится к signed, long, short и прочим "префиксам" типов.
31 августа 2009 в 21:05
unsigned без указания типа данных (т.е. по умолчанию) обозначает int. Железно для ANSI.
31 августа 2009 в 18:03
если не ошибаюсь ещё в ANSI было прописано что по умолчанию int.
31 августа 2009 в 18:00
тоже думаю, что по умолчанию считает int
31 августа 2009 в 17:00
Вероятно, положительное integer-значение…
31 августа 2009 в 17:00
то есть как это не указан? а unsigned ваш компилятор за тип не считает?