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...
Vim TÜM beyaz boşlukları göster bir ka...
Fıkra GİBİ SQL için özel karakter list...