SORU
2 Kasım 2014, Pazar


Neden bu 2 yerine 3 boyutlu bir yapı mı?

Bu yapı tanımlıyorum:

typedef struct
{
    char A:3;
    char B:3;
    char C:3;
    char D:3;
    char E:3;
} col; 

sizeof(col) beni 3, ama 2 olması gerekmiyor mu? çıktısını ver Ben sadece bir unsuru açıklama, sizeof 2'dir. Neden anlamıyorum: 3 bit beş element 15 bit eşittir, ve 2'den daha az bir bayt.

"İç boyutu" böyle bir yapının bir tanımlama? bir Ben sadece bir açıklama istiyorum, bu dil benim derdim çünkü şu ana kadar, 2 boyutunu byte, 3 bekliyordum.

CEVAP
2 Kasım 2014, Pazar


Çünkü kullanıyorsanız char temel türü için alanlar, derleyici çalışır grup bite bayt, ve o zamandan beri bu yerleştirilemiyor fazla sekiz bit her bayt, tek mağaza iki alan başına bayt.

Yapı kullanır ve bitlerin toplamı o kadar fazla veri sığdırmak için ideal boyut short olacak o kadar 15.

#include <stdio.h>

typedef struct
{
  char A:3;
  char B:3;
  char C:3;
  char D:3;
  char E:3;
} col; 


typedef struct {
  short A:3;
  short B:3;
  short C:3;
  short D:3;
  short E:3;
} col2; 


int main(){

  printf("size of col: %lu\n", sizeof(col));
  printf("size of col2: %lu\n", sizeof(col2));

}

Yukarıdaki kodu (64-bit benimki gibi platform için), gerçekten ikinci yapı için 2 verecektir. Bir şey daha büyük bir short, yapı yaz en fazla bir elemanın kullanılan tip, yani aynı platform - yapı sona erecek olan dört beden için int sekiz long, vb.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • superflyy88

    superflyy88

    8 ŞUBAT 2009
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008