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

  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011
  • Videojug

    Videojug

    25 EKİM 2006