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
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).
Komut (kedi gibi) karakter belirli bir...
Nasıl Unicode kaçış dizilerini çözmek ...
HttpUtility gibi Java HTML karakter va...
Fıkra GİBİ SQL için özel karakter list...
Nasıl Java konsolu (kullanıcı türleri ...