Определение int64 t


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

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

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

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

4 56

4 ответа:

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

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

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

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

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

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

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

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

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

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