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

  • We've moved!

    We've moved!

    7 Ocak 2008
  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • tutvid

    tutvid

    19 AĞUSTOS 2006