Поделиться через


Целочисленные константы в C++

Целочисленные константы — это такие константные элементы данных, которые не содержат дробных частей или экспонент. Они всегда начинаются с цифр. Целочисленные константы можно задавать в десятеричной, восьмеричной или шестнадцатеричной форме. Они могут обозначать знаковые или беззнаковые, а также длине или короткие типы.

Грамматика

  • целочисленная-константа:
    десятеричная-константа суффикс-целочисленного-значениянеобяз.

    восьмеричная-константа суффикс-целочисленного-значениянеобяз.

    шестнадцатеричная-константа суффикс-целочисленного-значениянеобяз.

    'последовательность-символов-с'

  • десятичная-константа:
    ненулевая-цифра

    десятичная-константа цифра

  • восьмеричная-константа:
    0

    восьмеричная-константа восьмеричная-цифра

  • шестнадцатеричная-константа:
    0x шестнадцатеричная-цифра

    0X шестнадцатеричная-цифра

    шестнадцатеричная-константа шестнадцатеричная-цифра

  • ненулевая-цифра: одна из указанных ниже
    1 2 3 4 5 6 7 8 9

  • восьмеричная-цифра: одна из указанных ниже
    0 1 2 3 4 5 6 7

  • шестнадцатеричная-цифра: одна из указанных ниже
    0 1 2 3 4 5 6 7 8 9

    a b c d e f

    A B C D E F

  • суффикс-целого-числа:
    суффикс-беззнакового-значения суффикс-длинного-значениянеобяз.

    суффикс-длинного-значения суффикс-беззнакового числанеобяз.

  • суффикс-беззнакового числа: один из указанных ниже
    u U

  • суфикс-длинного-значения: один из указанных ниже
    l L

  • суффикс-64-битного целого числа:
    i64 LL ll

Для указания целочисленных констант в восьмеричной или шестнадцатеричной нотации добавляется префикс, который обозначает основу. Для указания целочисленной константы заданного целочисленного типа добавляется суффикс, который обозначает тип.

Для указания десятичной константы спецификация должна начинаться с любой цифры кроме нуля. Например:

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

Чтобы указать восьмеричной константу спецификация начинается с нуля, за которой следует ряд цифр в диапазоне от 0 до 7. При определении восьмеричной константы цифры 8 и 9 создают ошибку. Например:

int i = 0377;   // Octal constant
int j = 0397;   // Error: 9 is not an octal digit

Для указания шестнадцатеричной константы спецификация должна начинаться с символов 0x или 0X (регистр символа "x" не имеет значения), за которыми следует ряд цифр в диапазоне от 0 до 9 и от a (или A) до f (или F). Шестнадцатеричные цифры от a (или A) до f (или F) представляют собой значения в диапазоне от 10 до 15. Например:

int i = 0x3fff;   // Hexadecimal constant
int j = 0X3FFF;   // Equal to i

Для указания беззнакового типа используется суффикс u или U. Для указания длинного типа используется суффикс l или L. Например:

unsigned uVal = 328u;             // Unsigned value
long lVal = 0x7FFFFFL;            // Long value specified 
                                  //  as hex constant
unsigned long ulVal = 0776745ul;  // Unsigned long value

Для указания 64-разрядного целочисленного типа используется суффикс LL, ll или i64. Например:

// 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);
}

Выходные данные

in f1(int)
in f1(__int64)

См. также

Ссылки

Литералы в C++