2016-02-06 8 views
7

W języku C++, konkretnie plik nagłówkowy cstdint, istnieją typy dla 8-bitowych liczb całkowitych, które okazują się być typu danych char z typem. Czy ktokolwiek mógłby zaproponować rzeczywisty 8-bitowy typ liczbowy?Czy istnieje rzeczywisty 8-bitowy typ danych liczbowych w C++

+0

http://pl.cppreference.com/w/cpp/types/integer –

+6

Jak rozumiem, 'int8_t' ma 8-bitową liczbę całkowitą, jeśli w ogóle jest zdefiniowane. Fakt, że twoja implementacja jest typem 'char' (lub może' signed char'), oznacza, że ​​'char' implementacji jest w rzeczywistości 8 bitami. Zauważ, że 'char' i jego krewni zawsze są typami całkowitymi w C i C++; różni się od niektórych innych języków, które nie traktują znaków jako typów arytmetycznych. –

+1

W bardziej powszechnych implementacjach "char" ma 8 bitów. Jeśli nie ma 8 bitów, nie będzie "std :: int8_t". – chris

Odpowiedz

11

Tak, masz rację. int8_t i uint8_ttypedef na char na platformach, gdzie 1 bajt składa się z 8 bitów. Na platformach, na których nie jest, podana zostanie właściwa definicja.

następującą odpowiedź opiera się na założeniu, że char jest 8 bits

char posiada 1 bajt, który może być signed lub unsigned na podstawie realizacji.

Więc int8_t jest signed char i uint8_t jest unsigned char, ale to będzie bezpieczne w użyciu int8_t/uint8_t jako rzeczywistą 8-bitową liczbę całkowitą bez powołując się zbytnio na realizację.

Dla punktu widzenia osoby realizującej, typedef fing, w którym char ma 8 bitów, ma sens.

Po zobaczeniu tego wszystkiego, Można bezpiecznie używać int8_t lub uint8_t jako rzeczywistej 8-bitowej liczby całkowitej.

+1

Zauważ, że 'int8_t' nie może być typemef do' char' na platformach, w których 'char' ma mniej niż 8 bitów. – vsoftco

+0

Moim zdaniem jest to, że 'char' ma 1 bajt. Czy nie jest? Może być muszę ponownie potwierdzić :) teraz – dlmeetei

+0

'char' jest rzeczywiście 1 bajt, ale 1 bajt nie zawsze jest 8 bitów, patrz np. [to] (http://stackoverflow.com/questions/2098149/what-platforms-have-something-other-than-8-bit-char). Chociaż uważam, że 'int8_t' nie jest zdefiniowany dla platform, w których bajt nie ma 8 bitów. – vsoftco

Powiązane problemy