Подтвердить что ты не робот

Определение int64_t

Я новичок в C/С++, поэтому у меня есть пара вопросов по базовому типу:

a) Можете ли вы объяснить мне разницу между int64_t и long (long int)? По моему мнению, оба являются 64-битными целыми числами. Есть ли какая-то причина выбора одного над другим?

b) Я попытался найти определение int64_t в Интернете без особого успеха. Есть ли авторитетный источник, с которым мне нужно проконсультироваться по таким вопросам?

c) Для кода, использующего int64_t для компиляции, я в настоящее время включаю <iostream>, что для меня не имеет большого смысла. Существуют ли другие, которые предоставляют объявление int64_t?

4b9b3361

Ответ 1

a) Можете ли вы объяснить мне разницу между int64_t и long (long int)? По моему мнению, оба являются 64-битными целыми числами. Есть ли какая-то причина выбора одного над другим?

Первый - это целочисленный тип со знаком ровно с 64 битами. Последний представляет собой целочисленный тип со знаком с не менее чем 32 битами.

b) Я попытался найти определение int64_t в Интернете без особого успеха. Есть ли авторитетный источник, с которым мне нужно проконсультироваться по таким вопросам?

http://cppreference.com описывает это здесь: http://en.cppreference.com/w/cpp/types/integer. Однако авторитетным источником является стандарт С++ (этот конкретный бит можно найти в §18.4. Целочисленные типы [cstdint]).

c) Для кода, использующего int64_t для компиляции, я включаю <iostream>, что для меня не имеет большого значения. Существуют ли другие, которые предоставляют объявление int64_t?

Он объявлен в <cstdint> или <cinttypes> (в пространстве имен std) или в <stdint.h> или <inttypes.h> (в глобальном пространстве имен).

Ответ 2

int64_t гарантируется стандартом C99 на ширину 64 бита на платформах, которые его реализуют, нет такой гарантии для long, которая составляет не менее 32 бит, поэтому она может быть больше.

§7.18.1.3 Точные целые типы 1 имя typedef intN_t обозначает знаковый целочисленный тип с шириной N, без битов дополнения и представление двойного дополнения. Таким образом, int8_t обозначает подписанный целочисленный тип с шириной ровно 8 бит.

Ответ 3

int64_t typedef вы можете найти, что в <stdint.h> в C

Ответ 4

int64_t должен иметь ширину 64 бит на любой платформе (отсюда и название), тогда как длина может иметь разную длину на разных платформах. В частности, sizeof (long) часто 4, т.е. 32 бит.