Почему 64-битное целое расширение C ++ называется «долгим долгом»? -- c++ поле с участием types поле с участием 64-bit поле с участием long-integer поле с участием naming пол Связанный проблема

Why is the 64bit integer extension of C++ called “long long”?


1
vote

проблема

русский

В отличие от других типов: «int», "логический", "двойной" и т. Д. И даже таможенные классы, есть только одно слово. Однако только одно слово для их типа только то, что целое число использует два слова; Как и почему это может быть особенным?

Английский оригинал

Unlike other types:"int","boolean","double", etc. And even custom classes, there are one word only. There is only one word for their type, however, only that integer is using two words; how and why can it be that special?

</div
              
     
     

Список ответов

3
 
vote
vote
Лучший ответ
 

от: " Длинная дорога до 64 бит " - от Джона Р. Маши | 1 октября 2006 г. - Эволюция системы

"ALGOL 68 вдохновлен Долго длинный в 1968 году, и он также был добавлен в GNU C в какой-то момент."

Экстракт: <Сильная> Хронология: Несколько блокирующих потоков

    .
  • 1964 IBM S / 360: 32 -bit, с 24-битной адресацией (всего 16 МБ) реального (ядро) память.
  • 1968 ALGOL 68: включает в себя долгое время. [ долго длинный для int , , а также давно длинные реальные, ну, биты и bytes ]
  • 1970 dec pdp-11/20: 16-битный, 16-битный адресация ( 64 Kb Total). IBM S / 370 Семья: виртуальная память, 24-битные адреса, но несколько пользовательских адресов допускаются.
  • ...
  • 1984 Motorola MC68020: 32 -Bit; 32 -bit адресация.
  • 1984 c: amdahl uts ( 32 -bit s / 370) использует долгое длинное, особенно для больших указателей файла.
  • 1984 c: выпуклые ( 64 -bit vector mini-supercomputer) использует длинную длинную длину для целых чисел 64 -bit.
  • 1986 Intel: 80386, 32 -Bit, при поддержке режима 8086.
  • ...
  • 1989 ansi c ("C89"): усилия начались в 1983 году, ANSI X3J11.
  • 1992 SGI: Ships First 64 -Bit Micro (MIPS R4000); Все еще работает 32 -bit операционная система. 64 -HIT CHIT CHEAND GROUP: обсуждает различные модели ( lp64 , ilp64 , llp64 ), с небольшим соглашением.
  • 1992 dec: корабли 64 -bit alpha alpha systems, работает 64 -bit операционная система; <сильный> LP64 .
  • 1994 sgi: корабли IRIX 6 ( 64 / 32 Операционная система; ILP32LL + LP64 ) Вызов; Пользователи покупают 4 ГБ + память, используйте ее. Dec: корабли 4 ГБ + в декабря 7000 SMPS (возможно, было немного раньше).
  • 1995 Sun UltraSPARC: 64 / 32 -BIT оборудования, 32 операционная система только. HAL Computer SPARC64 : использует ILP64 Модель для C.
  • 1995 Большой файловый саммит: кодификации 64 -BIT интерфейс для файлов и GT; 2 ГБ, даже в 32 -Bit Systems (ILP32LL + LP64 ).
  • 1994 Aspen Группа: Поддерживает модуль LP64 Модель для C, чтобы поставщики Unix согласуются.
  • 1996 HP: объявляет PA-RICH 2.0, 64 -BIT.
  • ...

Конец экстракта.

Примечание: Standard algol68↗ делает не / strong> для Unicode / utf16, ни длинный длинный символ , но (удобно) размер char не требуется одинаковым размером, что и у <сильный > Байт . Иногда - «традиционно» - <сильный> чар был менее 8-бит, например 6-бит ( ASCII или ГОСТ ) или 7 бит (например, ascii и теперь GSM_03.38 )

 

From: "The Long Road to 64 Bits" - by John R. Mashey | October 1, 2006 -Topic: System Evolution

"Algol 68 inspired long long in 1968, and it was also added to GNU C at some point."

Extract: Chronology: Multiple Interlocking Threads

  • 1964 IBM S/360: 32-bit, with 24-bit addressing (16 MB total) of real (core) memory.
  • 1968 Algol 68: includes long long. [long long for int, and also long long real, compl, bits and bytes]
  • 1970 DEC PDP-11/20: 16-bit, 16-bit addressing (64 KB total). IBM S/370 family: virtual memory, 24-bit addresses, but multiple user address spaces allowed.
  • ...
  • 1984 Motorola MC68020: 32-bit; 32-bit addressing.
  • 1984 C: Amdahl UTS (32-bit S/370) uses long long, especially for large file pointers.
  • 1984 C: Convex (64-bit vector mini-supercomputer) uses long long for 64-bit integers.
  • 1986 Intel: 80386, 32-bit, with support for 8086 mode.
  • ...
  • 1989 ANSI C ("C89" ): effort had started in 1983, ANSI X3J11.
  • 1992 SGI: ships first 64-bit micro (MIPS R4000); still running 32-bit operating system. 64-bit C working group: discusses various models (LP64, ILP64, LLP64), with little agreement.
  • 1992 DEC: ships 64-bit Alpha systems, running 64-bit operating system; LP64.
  • 1994 SGI: ships IRIX 6 (64/32 operating system; ILP32LL + LP64) on Power Challenge; customers buy 4 GB+ memory, use it. DEC: ships 4 GB+ in DEC 7000 SMPs (may have been slightly earlier).
  • 1995 Sun UltraSPARC: 64/32-bit hardware, 32-bit-only operating system. HAL Computer’s SPARC64: uses ILP64 model for C.
  • 1995 Large file summit: codifies 64-bit interface to files >2 GB, even in 32-bit systems (ILP32LL+LP64).
  • 1994 Aspen group: supports LP64 model for C so that Unix vendors are consistent.
  • 1996 HP: announces PA-RISC 2.0, 64-bit.
  • ...

End extract.

Note: Standard Algol68↗ does not have long char for unicode/UTF16, nor long long char, but (conveniently) the size of a char is not required to be the same size as that of a byte. Sometimes - "traditionally" - a char was less then 8-bits, e.g. 6-bits (ASCII or GOST) or 7-bits (eg ASCII and now GSM_03.38)

</div
 
 
 
 
2
 
vote

Схема именования для типов C, в конечном итоге, кажется, наследует от старого старого алгола, который позволил произвольному количеству «коротких» или «длинных» префиксов перед типами, как <код> int или <код> real (Это имя для поплавков). Конечно, их интерпретация была зависимой реализацией, и не было никакой гарантии, что <Код> long long long int был на самом деле любой больше, чем <код> long int .

c Унаследовал префиксы (для ints, по меньшей мере, странно достаточно, они выбрали что-то более Adhoc для поплавков), но в то время не видели необходимость допускаться итерации. И потому, что C был довольно сладко во многих отношениях, он также позволил бросить <код> int в случае <код> long int .

с появлением 64-битных машин, предположение, что только несколько размеров, и, таким образом, один префикс в этой схеме, необходимы, и компиляторы начали поддерживать <код> long long . Часть причины, по которой эта схема была заново открыта, вероятно, была то, что она не требовала ключевого слова на Clobbering новое имя. Затем C99 сделал официальную часть этого типа стандарта, а C ++ позже унаследовал его.

 

The naming scheme for C types ultimately seems to inherit from good old Algol, which allowed arbitrary numbers of "short" or "long" prefixes before types like int or real (it's name for floats). Of course, their interpretation was implementation dependent, and there was no guarantee that long long long int was actually any bigger than long int.

C inherited the prefixes (for ints at least, strangely enough they chose something more adhoc for floats), but at the time did not see the need for allowing to iterate them. And because C was pretty lax in many respects, it also allowed to drop the int itself in the case of long int.

With the advent of 64 bit machines, the assumption that only few sizes, and thus a single prefix in this scheme, are needed broke, and compilers started supporting long long. Part of the reason this scheme was rediscovered probably was that it did not require clobbering a new name or keyword. C99 then made this type official part of the standard, and C++ later inherited it.

</div
 
 
   
   
2
 
vote

На самом деле, как я писал в «длинной дороге до 64 битов»

"когда-то около 1984 года, amdahl uts и выпуклые добавлены в долгосрочные длинные до 64-битных целых чисел, первое на 32-битной архитектуре, последнее на 64-горьком. UTS использовали это, особенно для длинных указателей файла, один из Такие же мотивации в течение длительного времени в PDP-11 UNIX (1977). Algol 68 вдохновил долго долгую долго в 1968 году, и он также был добавлен в GNU C в какой-то момент. Многие переправили этот синтаксис, но, по крайней мере, он потреблял не более зарезервированные ключевые слова. / P >.

Я не знаю, когда GCC добавил долгое время, но поскольку GCC 1.0 был выпущен в 1987 году, эти другие были ранее.

Действительно, на практике это было решено де-факто на рабочей группе 1992 года, описанной в «длинной дороге».

 

Actually, as I wrote in "The Long Road to 64-bits"

"Sometime around 1984, Amdahl UTS and Convex added long long for 64-bit integers, the former on a 32-bit architecture, the latter on a 64-bitter. UTS used this especially for long file pointers, one of the same motivations for long in PDP-11 Unix (1977). Algol 68 inspired long long in 1968, and it was also added to GNU C at some point. Many reviled this syntax, but at least it consumed no more reserved keywords."

I don't know offhand when GCC added long long, but since GCC 1.0 was released in 1987, these others were earlier.

Really, in practice this was decided de facto by the 1992 working grooup described in "The Long Road".

</div
 
 
 
 
1
 
vote

Причина, по которой стандарты C ++ и C приняли <Код> long long заключается в том, что GCC использовал его в течение многих лет, и, несмотря на то, что это присущее уродство, существующая практика победила. Что касается того, почему GCC выбрал это имя, вам придется спросить их. <Код> <g> .

 

The reason that the C++ and C standards adopted long long is that GCC had been using it for years, and, despite it's inherent ugliness, existing practice won out. As to why GCC chose that name, you'll have to ask them. <g>.

</div
 
 
 
 
0
 
vote

<Код> long long дифференцирует себя из <код> real0 , который обычно составляет всего 4 байта (32 бита).

<Код> real1 - это модификатор, который можно использовать на многих примитивных типах, чтобы их изменить.

 

long long differentiates itself from long, which is typically only 4 bytes (32 bits).

long is a modifier, which can be used on many primitive types to modify them.

</div
 
 

Связанный проблема

0  Libusb_Bulk_Transfer добавляет CRC?  ( Does libusb bulk transfer add crc ) 
Я пишу программу пользовательского интерфейса для устройства USB в C ++, используя Visual Studio 2019. Я использую библиотеку Libusb. Я хочу сделать объемную ...

0  Использование аргументов Makefile без Foo =  ( Using makefile arguments without foo ) 
У меня есть makefile, который я использую для компиляции одного файла. Когда мне нужно пройти аргумент, я использую цель = TargetFile. Сценарий принимает ар...

0  Проблема дизайна - создание шрифта Global (C ++, Marmalade)  ( Design issue making a font global c marmalade ) 
У меня есть проект Marmalade C ++, где встроенный в шрифте не масштабируется на экран. Чтобы справиться с этим вопросом, я делаю пользовательский шрифт, котор...

0  Проблемы с повышением :: ptr_vector и Boost :: любой  ( Problems with boostptr vector and boostany ) 
Хорошо, так что я сомневался, я хочу знать, если это возможно: Я использую базу данных, с общими данными (строки, ints, bools и т. Д.). Всякий раз, когда об...

1  Opencv Изображение Цветовое пространство Преобразование с использованием CVTColor  ( Opencv image color space transformation using cvtcolor ) 
Я использую ниже OpenCV API для преобразования цветового пространства: <код> cvtColor(<input mat>, <output mat>, COLOR_RGB2RGBA); Однако выходное изобра...

2  Новый DataType, который может иметь количество до 100 цифр  ( New datatype which can have numbers upto 100 digits ) 
Примечание. Это был вопрос интервью и может не иметь фактического случая использования в настоящее время Вопрос должен был разработать класс, который может ...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

6  Теоретически, находит_енди параллельно?  ( In theory is find end parallelizable ) 
В настоящее время я работаю над open -Под предложению Для достижения параллельной функциональности проекту я работаю, но я столкнулся с дорожным блоком с f...

2  ODBC и NLS_LANG  ( Odbc and nls lang ) 
Допустим, я создал две разные исполняемые файлы программы, например, в C ++. По какой-то причине две программы внутреннее представление текста отличаются др...

1  C ++ - утечка памяти, вызванная использованием размещения New Over * этот указатель?  ( C memory leak caused by using placement new over this pointer ) 
Как известно, размещение New просто строит объект без выделения любой памяти. Также все члены в классе <Код> 5.5.10 являются объектами вместо указателей, хот...

1  Не можете получить программу Math C ++ для работы [дубликата]  ( Cant get math c program to work ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)"  ( Error argument of type void opca hello does not match void void ) 
Я написал очень простой код для резьбы. Поскольку я очень новый для этого, я понятия не имею об ошибке. <код> class opca_hello { public: void hello(); } v...

1  STD :: CIN непосредственно к функции  ( Stdcin directly to a function ) 
Недавно я наткнулся на следующую часть кода. Я не знаю, имеет ли это какой-либо смысл, я просто пытаюсь его понять: <код> object Gender extends Enumeration ...

-1  Мусор с указателями в классе, C ++  ( Garbage with pointers in a class c ) 
Я использую Borland Builder C ++. У меня есть утечка памяти, и я знаю, что это должно быть из-за этого класса, который я создал, но я не уверен, как это испра...

0  Как получить несколько наборов результатов с Poco :: Data?  ( How to fetch multiple result sets with pocodata ) 
Я прочитал Poco :: Руководство пользователя данных и упоминается, что Библиотека имеет поддержку нескольких наборов результатов. Существует пример для этой ...