Constantes de inteiro C++
As constantes de inteiro são elementos de dados constantes que não têm nenhuma parte fracionária ou expoente. Sempre começam com um dígito. Você pode especificar constantes de inteiro no formato decimal, octal ou hexadecimal. Elas podem especificar tipos com sinal e sem sinal e longos ou curtos.
Gramática
integer-constant:
decimal-constant integer-suffixoptoctal-constant integer-suffixopt
hexadecimal-constant integer-suffixopt
'c-char-sequence'
decimal-constant:
nonzero-digitdecimal-constant digit
octal-constant:
0octal-constant octal-digit
hexadecimal-constant:
0x hexadecimal-digit0X hexadecimal-digit
hexadecimal-constant hexadecimal-digit
nonzero-digit: um de
1 2 3 4 5 6 7 8 9octal-digit: um de
0 1 2 3 4 5 6 7hexadecimal-digit: um de
0 1 2 3 4 5 6 7 8 9a b c d e f
A B C D E F
integer-suffix:
unsigned-suffix long-suffixoptlong-suffix unsigned-suffixopt
unsigned-suffix: um de
u Ulong-suffix: um de
l L64-bit integer-suffix:
i64 LL ll
Para especificar constantes de inteiro usando a notação octal ou hexadecimal, use um prefixo que denote a base. Para especificar uma constante de inteiro de determinado tipo integral, use um sufixo que denote o tipo.
Para especificar uma constante decimal, inicie a especificação com um dígito diferente de zero. Por exemplo:
int i = 157; // Decimal constant
int j = 0198; // Not a decimal number; erroneous octal constant
int k = 0365; // Leading zero specifies octal constant, not decimal
Para especificar uma constante octal, inicie a especificação com o 0, seguido por uma sequência de dígitos no intervalo de 0 a 7. Os dígitos 8 e 9 são erros na especificação de uma constante octal. Por exemplo:
int i = 0377; // Octal constant
int j = 0397; // Error: 9 is not an octal digit
Para especificar uma constante hexadecimal, inicie a especificação com 0x ou 0X (não importa se “x” é minúsculo ou maiúsculo), seguido por uma sequência de dígitos no intervalo de 0 a 9 e de a (ou A) a f (ou F). Os dígitos hexadecimais de a (ou A) a f (ou F) representam valores no intervalo de 10 a 15. Por exemplo:
int i = 0x3fff; // Hexadecimal constant
int j = 0X3FFF; // Equal to i
Para especificar um tipo sem sinal, use o sufixo u ou U. Para especificar um tipo longo, use o sufixo l ou L. Por exemplo:
unsigned uVal = 328u; // Unsigned value
long lVal = 0x7FFFFFL; // Long value specified
// as hex constant
unsigned long ulVal = 0776745ul; // Unsigned long value
Para especificar um tipo integral de 64 bits, use o sufixo LL, ll ou i64. Por exemplo,
// 64bitsuffix.cpp
#include <stdio.h>
enum MyEnum {
IntType,
Int64Type
};
MyEnum f1(int) {
printf("in f1(int)\n");
return IntType;
}
MyEnum f1(__int64) {
printf_s("in f1(__int64)\n");
return Int64Type;
}
int main() {
MyEnum t1 = f1(0x1234), t2 = f1(0x1234i64);
}
Saída
in f1(int)
in f1(__int64)