SORU
9 NİSAN 2013, Salı


Vardır int8_t ve uint8_t bir karakter gibi davranmaya amaçlanan?

C 11 Bu program, belirli bir sayı veya harf görmek beklemeliyim? Ya da beklentileri yapmak değil mi?

#include <cstdint>
#include <iostream>

int main()
{
    int8_t i = 65;
    std::cout << i;
}

Standart bu tür bir karakter ya da bir tür olup olmayacağını belirtmek mu?

CEVAP
9 NİSAN 2013, Salı


int8_t tam olarak 8 bit ise (varsa).

8 bit olabilir, sadece önceden tanımlanmış tamsayı türleri char, unsigned char signed char. short unsigned short en az 16 bit olmalıdır.

int8_t signed char düz char (eğer düz char imzalanırsa ikinci) için bir typedef olmalı.

Eğer bir karakter olarak bir tamsayı olarak yerine int8_t bir değer yazdırmak istiyorsanız, açıkça int dönüştürebilirsiniz.

Prensip olarak, bir C derleyicisi 8-bit bir tanımlama olabilirtamsayı türü genişletilmiş(belki de __int8 gibi bir şey olarak da adlandırılır) ve int8_t bunun için bir typedef olun. Aklıma gelen tek sebebi, bunu yapmak için int8_t karakter türü yapmaktan kaçınmak olacaktır. Aslında bu işi herhangi bir C derleyici bilmiyorum.

int8_t ve uzun tamsayı türleri hem c99'da tanıtıldı. C char türleri mevcut olduğunda 8-bit genişletilmiş bir tamsayı türü tanımlamak için özel bir nedeni yok.

GÜNCELLEME:

Bu sonuç pek memnun değilim. int8_t uint8_t c99'da tanıtıldı. C, özellikle karakter türleri olsun ya da olmasın, önemli değil; kendisi için fark gerçek bir fark yaratıyor işlemler vardır. (Bile putc() standart C en düşük seviyeli karakter çıktı rutin, int bağımsız değişken olarak Basılacak karakter alır). int8_t ve eğer tanımlanmış olup olmadıklarını uint8_t,, neredeyse kesinlikle karakter türleri -- ama karakter türleri sadece küçük tamsayı türleri olarak tanımlanacaktır.

C std::cout << 'A' std::cout << 65 çok farklı çıktılar elde böylece char, signed char unsigned char operator<< belirli aşırı yüklü sürümlerini sağlar. Daha sonra, C int8_t uint8_t ama, C olarak, neredeyse kesinlikle onlar böyle bir şekilde karakter türleri kabul etti. Çoğu işlem için, bu daha fazla C önemli değil ama std::cout << ... için, bu yana, bu bir fark yaratıyor

uint8_t x = 65;
std::cout << x;

muhtemelen 37* *harfi yerine 38* *numarasını Yazdır.

Eğer tutarlı bir davranış istiyorsanız, dökme ekleyin:

uint8_t x = 65;
std::cout << int(x); // or static_cast<int>(x) if you prefer

Sorunun kökü bir dilden eksik var bence: karakter türleri tamsayı. çok dar

İçinniyetKomite üyeleri konu hakkında düşünmedim , ya da ele geçirmeye değmez karar verdiğini tahmin etmem. Standart [u]int*_t türleri ekleyerek faydaları std::cout << ... ile oldukça tuhaf davranışları olan rahatsızlık daha ağır basar iddia olabilir (ve ben).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006
  • InfoPuppet

    InfoPuppet

    15 Kasım 2011
  • International Secret Agents Concerts

    Internationa

    2 Aralık 2008