Несколько месяцев назад я приобрел себе ноутбук с процессором Intel i7-2630qm с 64-битными окнами.Практикуя свои навыки программирования в этой системе, я столкнулся с некоторой разницей с точки зрения целочисленного размера, которая заставляет меня думать, что это, вероятно, связано с моей новой 64-битной системой.
Давайте посмотрим на код.
Код C:
#include <stdio.h>
int main(void)
{
int num = 20;
printf("%d %lld\n" , num , num);
return 0;
}
Вопрос:
1.) Я помню, как получил этот новый ноутбук, которыйозначает, что в то время, когда я все еще использую мою старую 32-битную систему, когда я запускаю этот код, программа выведет целое число 20
, а рядом с ним будет какое-то случайное число из-за спецификатора %lld
.
2.) Но этого явления больше не происходит, когда я использую свой новый ноутбук, вместо этого он будет правильно печатать оба целых числа, даже если я изменю переменную num
на тип short
.
3.) Является ли это в 64-битной системе, есть новое целочисленное продвижение, которое будет продвигать int
на длинные, если оно используется в качестве аргумента? Или это short
целое число может быть преобразовано в long long
, что является 64-битнымтоже когда передать в качестве аргумента ??
4.) Кроме тЕсли я в какой-то степени путаюсь, то в 16-битной системе int
будет 16-битной и 32-битной в 32-битной системе. Но почему она не станет 64-битной?когда он на 64-битном ??
======================================================================================= Дополнение:
1.) Я выбираю "консольную программу (64-разрядную)" в качестве своего проекта в IDE при использовании моего нового ноутбука, но "консольную программу" на моей 32-разрядной старой системе ПК.
2.) Я проверил размер int
в проекте "консольная программа (64-разрядная версия)", используя оператор sizeof
, и он возвращает 32-разрядную версию, тогда как short
все еще остается 16-разрядной.. Единственное изменение - long
тип, оно 64-битное, а long long
все еще остается обычным 64-битным размером.