Начать здесь:
var b = 'bee';
console.log(b); // global
Поместить его в функцию и больше не глобально - ваша основная цель.
function a() {
var b = 'bee';
console.log(b);
}
a();
console.log(b); // ReferenceError: b is not defined -- *as desired*
Вызовите функцию немедленно - oops:
function a() {
var b = 'bee';
console.log(b);
}(); // SyntaxError: Expected () to start arrow function, but got ';' instead of '=>'
Используйте круглые скобки, чтобы избежать синтаксической ошибки:
(function a() {
var b = 'bee';
console.log(b);
})(); // OK now
Вы можете оставить имя функции:
(function () { // no name required
var b = 'bee';
console.log(b);
})();
Это не должно быть более сложным, чем это.
long long
может содержать до 9223372036854775807. Используйте что-то вроде gmp
, если вам нужно больше.
Вы можете использовать длинный int:
long int a
Или, если он всегда будет положительным, unsigned long int:
unsigned long int a
Просто обратите внимание, что оба int64_t
и long long
включены в C99 и в C ++ 0x, но не в текущей версии C ++. Таким образом, использование или делает ваш код подверженным риску быть не переносным. Реально, однако, что риск, вероятно, уже довольно низок - до такой степени, что когда / если вы портируете свой код, скорее всего, будут гораздо большие проблемы.
Если, однако, вы действительно хотите заверить против этой возможности вы можете рассмотреть возможность использования двойной точности с плавающей запятой. Вопреки распространенному мнению, типы с плавающей точкой могут представлять целые числа точно до определенного предела - этот предел устанавливается (по существу) на размер мантиссы в F.P. тип. Типичная реализация double имеет 53-битную мантиссу, поэтому вы можете представлять 53-битные целые числа с абсолютной точностью. Это поддерживает номера до 9 007 199 254 740 992 (что значительно превышает 13 из либо популярных значений «миллиард»).
double
не имеет значения. double
должен иметь не менее 12 значащих цифр, независимо от точного представления. 13 миллиардов занимает всего 11 цифр.
– MSalters
10 February 2010 в 11:26
Используйте int64_t , чтобы гарантировать, что вы не будете переполняться. Он доступен из stdint.h .
int64_t
не гарантирует это вообще! Вы можете также превысить его емкость.
– Seth Johnson
9 February 2010 в 19:47
int64_t
все еще может переполняться.
– Matthew Flaschen
9 February 2010 в 19:52
просто используйте double в заявлении декларации
Хорошая идея понять пределы диапазона для разных типов.
32-битный тип (на большинстве 32-разрядных платформ, как int, так и long 32 бит) имеют следующие диапазоны:
signed: -2,147,483,648 to 2,147,483,647
unsigned: 0 to 4,294,967,295
В то время как 64-битные типы (обычно длинные - 64 бит, на большинстве 64-разрядных платформ Unix - 64) имеют следующий диапазон:
signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned: 0 to 18,446,744,073,709,551,615
Тип данных (int) слишком мал, чтобы хранить такие большие числа. Вы должны использовать более крупный тип данных или один из типов данных фиксированного размера, как указано в другом ответе (хотя вы действительно должны использовать uint64_t, если вы не используете отрицательные числа).
long long
- 8 байтов в GCC и VC ++ независимо от платформы – Manuel 9 February 2010 в 20:00long
. Кроме того,int64_t
в значительной степени по определению NOT FASTER, чемlong long
, поскольку последний тип имеет меньше требований (в частности, длинный длинный может быть более 64 бит) – MSalters 10 February 2010 в 11:21&= 0xFFFFFFFFFFFFFFFF
была вставлена во многие моменты. Более распространенным примером, где более низкая точность является более медленной для загрузки, является 64/80 бит операций FP на x87. – MSalters 11 February 2010 в 10:48int_least64_t
(§18.4.1). Это кажется совершенно несовместимым с вашим утверждением. Кроме того, выборка 64-битного числа всегда будет быстрее (время амортизации), чем выборка 128 бит, независимо от того, что делает ALU. – Potatoswatter 11 February 2010 в 21:47LLONG_MAX >= +9223372036854775807
иLLONG_MIN <= -9223372036854775807
, следовательно, минимум для 64 бит дляlong long
. – Ben Voigt 8 September 2013 в 17:09