2012-02-20 2 views
0

Когда мы выполняем любую операцию с неподписанным коротким int, он получает повышение без знака int даже на машине, в которой оба типа данных имеют одинаковый размер. Какова цель такого продвижения? Как это помогает? Разве это не просто изменение имени (поскольку оба имеют одинаковый размер)?Почему unsigned short int повышается до unsigned int, даже когда размеры одинаковы?

+0

Типы по-прежнему отличаются от перспектив системы типа C, даже если они потребляют столько же битов в памяти на вашей конкретной платформе. – reuben

+0

@Reuben, можете ли вы привести пример о том, как это помогает в любом случае. Нужно ли беспокоиться о таком преобразовании? Будет ли это потенциальной ошибкой? – bubble

+0

Существуют существующие платформы/машины/операционные системы, на которых 'sizeof (unsigned short int)! = Sizeof (unsigned int)' – reuben

ответ

1

Первоначальный мандат комитета ANSI C заключался в кодификации существующей практики, а не в создании нового языка.

И стандарт C во всех своих итерациях через ANSI и ISO очень серьезно относится к обратной совместимости.

Другими словами, это делается именно так, потому что это всегда было сделано таким образом :-)

Причина продвижение делается потому, что стандарт для всех реализаций, в том числе тех, где размеры различны ,

Но я не уверен, о чем вы жалуетесь. Продвижение, когда типы имеют одинаковый размер, вряд ли может повлиять на производительность.

2

Грубо говоря, потому что именно так Деннис Ритчи решил, что он должен вернуться в начале 1970-х годов, когда он впервые изложил правила для C (или, по крайней мере, сначала изложил правила для C с поддержкой целых типов unsigned, но это было уже потому, что short было повышено до int).

Смежные вопросы