singlepost

Битовые поля в [C] << На главную или назад  

есть фрагмент кода:

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", при условии что у нас не указан тип данных переменной ?

88 ответов в теме “Битовые поля в [C]”

  1. 11
    Леонид Максимов ответил:

    >> так ведь инт по умолчанию принимает 4 байта..

    не совсем так. int нынче бывает разный – от двух до восьми байт.

    >> по умолчанию если проглатывает то точно int, также и функции если не указан тип или void то считается что int, но все ли трансляторы это съедят…

    должны съесть, куда они денутся? может просто дополнительные флаги в командной строке им надо будет указать.

    >> и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?

    не факт (в приведенном примере – принадлежат одному). да и какая вам разница? есть же sizeof.

  2. 10
    Павел Потапов ответил:

    >> вопрос такой : Что же обозначает спецификатор "unsigned", при условии что у нас не указан тип данных переменной ?

    Вполне возможно, что да (не помню точно :( ). Читайте доки по поводу выравнивания. Также можно просто проверить оператором sizeof (правда, если он есть в си не знаю) или скастовав указатель на структуру к чару и, присвоив ей какое-нить значение (чар естественно), посмотреть, что поменялось.

    #10 Читаем внимательно:
    unsigned delta_cts: 1;

  3. 9
    Нгамдкхе Кверос ответил:

    стандартов много(в смысле хронологически менялся стандарт существенно), по умолчанию если проглатывает то точно int, также и функции если не указан тип или void то считается что int, но все ли трансляторы это съедят… лучше не экономить чары и явно прописать инты, оно и красивей.

  4. 8
    Нгамдкхе Кверос ответил:

    "так ведь инт по умолчанию принимает 4 байта.."

    нифига!это где как, в 32-ух битных системах обычно да, в 16 это 16 бит (именно "обычно" читайте документацию вашего транслятора, это очень неприятная ошибка часто возникающая при переносе по с одной железки на другую по числу байтов в типе, также, кстати, не стандартизован порядок байт в инте, обычно он привязан к машине(что логично ибо при каждой операции дважды переставлять байты…) от того и нужны макросы htons и т.п.)

    "и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?"

    как вы это задали?

  5. 7
    Подмогаев Свят ответил:

    так ведь инт по умолчанию принимает 4 байта..
    и еще такой вопрос : если заданно несколько полей , количеством бит меньше, чем 8, то они автоматом принадлежат одному байту ?

  6. 6
    Кирилл Быков ответил:

    Да-да, то же относится к signed, long, short и прочим "префиксам" типов.

  7. 5
    Андрей Лимаев ответил:

    unsigned без указания типа данных (т.е. по умолчанию) обозначает int. Железно для ANSI.

  8. 4
    Артём Малаховский ответил:

    если не ошибаюсь ещё в ANSI было прописано что по умолчанию int.

  9. 3
    Александр Васюченко ответил:

    тоже думаю, что по умолчанию считает int

  10. 2
    Роман Чваников ответил:

    Вероятно, положительное integer-значение…

  11. 1
    Леонид Максимов ответил:

    то есть как это не указан? а unsigned ваш компилятор за тип не считает?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.