SORU
7 ŞUBAT 2010, Pazar


Boyutu(char)=! orada makineler, 1?

sizeof(char) != 1 * * * * makine (veya Derleyiciler) var mı ?

YokC99 standardıyazan standart uyum uygulama sizeof(char) tam olarak 1 OLMALIDIR? Eğer varsa, lütfen bana bölüm numarası ve referans verin.

Güncelleme: Eğer bir makine (İŞLEMCİ) varsa, bayt (en az okuma 4 bayt hizalanmış) adresi olamaz, ama sadece 4-s bayt (uint32_t)bu makine için derleyici 4 sizeof(char) tanımlayabilirsiniz?sizeof(char) 1, ama char 32 bit olacaktır(CHAR_BIT makrolar)

Update2: Ama boyutu neden bir BAYT DEĞİL ! CHAR büyüklüğünde. Ve 2 byte ya da (olabilir) 7 bit olması char?

Update3: Tamam. Tüm makineleri sizeof(char) == 1. Ama makineleri CHAR_BIT > 8 ne var ?

CEVAP
7 ŞUBAT 2010, Pazar


Her zaman C99, bölüm 6.5.3.4 içinde olduğu

Bir işlenen uygulandığında imzasız char tip char, veya imzalı (ya da nitelikli bir sürüm bunun gibi)char sonuç 1'dir.

Edit: Harbison ve Steele faiz, 3rd ed. için Sorunuzun bir parçası değil, ama (ön c99) p. 148:

Depolama birimi olarak ele alınır. depolama tarafından işgal edilen miktarı karakter; bir nesnenin boyutu yazın char Bu nedenle 1.

Edit: aşağıdaki soru ve cevap ilgili (Eski age. profesyonel Sorunuzun cevabı Ch 4. 6):

"C" için kabul edilebilir mi char hangi uygulama değerleri arasında değişen temsil 2,147,483,647 ile -2,147,483,648? Yani, sizeof(char)ne olurdu eğer bunun altında uygulama? Ne olurdu en küçük ve en büyük aralıkları yazın int?

Cevap (p. age 382):

İzin savurgan (varsa) için 32 bit kullanmak için uygulama 18 ** türü temsil eder. Ne olursa olsun bu uygulama, değeri sizeof(char) Her zaman 1'dir.

Bu süre değil özellikle Adres dava nerede, söyle bayt 8 bit ve char 4 o bayt (aslında imkansız olan c99 tanımı, aşağıya bakınız), aslında bu sizeof(char) = 1 Her zaman açık c99 standart ve Harbison ve Steele.

Edit: aslında (bu modern family 2 sorunuza yanıt olarak) olarak c99 sizeof(char) ilgilidirbayt cinsinden, bölüm 6.5.3.4 tekrar:

İşletmen boyutu verir (bayt olarak) işlenen

c99 bayt char bir aynıdır. için, 8 bit ve bayt 4 char bayt imkansızdır yukarıdaki tırnak ile bir araya getirdim:

7 bit char bir olasılığı bahsettiğiniz cevap: bu c99'da mümkün değildir. Standart bölüm 5.2.4.2.1 göreminimum8:

Kendi tanımlı uygulama değerleri eşit olacaktırya da daha büyük[vurgu benim] aynı işareti ile gösterilen büyüklük.

— bitlik sayı için en küçük bir nesne değil, bit-alanı (bayt)

 **CHAR_BIT 8**

türünde bir nesne için minimum değer char imzaladı

**SCHAR_MIN -127//−(27−1)** 

türünde bir nesne için maksimum değer char imzaladı

**SCHAR_MAX  127//27−1** 

türü işaretsiz char türünde bir nesne için maksimum değer

**UCHAR_MAX 255//28−1** 

char türü bir nesne için minimum değer

**CHAR_MIN**    see below 

char türü bir nesne için maksimum değer

**CHAR_MAX**    see below

[...]

Türünde bir nesne değeri char imzalı bir tamsayı olarak kabul edilir bir ifadenin, değeri CHAR_MİN aynı olacaktır SCHAR_MİN ve CHAR_MAX değeri aynı olacaktır SCHAR_MAX. Aksi halde, değeri CHAR_MİN ve değeri 0 olacaktır CHAR_MAX aynı olacaktır UCHAR_MAX. Değer UCHAR_MAX olacaktır 2^CHAR_BİT − 1 eşit.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • bashirsultani

    bashirsultan

    22 Mart 2010
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006