Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> long == int ? 
V
    Опции темы
Hagrael
Дата 12.8.2011, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Скомпилировал и запустил такой код:
Код

#include <iostream>

int main() {

    std::cout << (sizeof (int) == sizeof (long));

}

Выводится 1 о_О И int, и long имеют по 4 байта. Здесь сказано, что int должен занимать 2 байта, такого я раньше нигде не видел) Читал, что int должен занимать 4 байта. В итоге вообще запутался. Не могли бы вы объяснить, в чем отличие long от int и сколько каждый из типов занимает?
PM MAIL   Вверх
mes
Дата 12.8.2011, 08:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



на разных платформах размеры могут принимать разные значения.. 
по стандарту для арифметических типов определена только зависимость ( для Вашего сучая: sizeof (short) <= sizeof(int) <=sizeof(long)), но не конкретные размеры.. 


Это сообщение отредактировал(а) mes - 12.8.2011, 08:38


--------------------
PM MAIL WWW   Вверх
bsa
Дата 12.8.2011, 13:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Hagrael, int занимает 2 байта для 8-ми и 16-ти битных платформ. А у тебя 32-х битная (или даже 64-х битная Windows).
PM   Вверх
Hagrael
Дата 12.8.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Получается, что sizeof (int) = битность_платформы / 8 ?)) Или это просто совпадение? 16-битная, 32-битная система, - это же все характеристики ее разрядности? И правильно ли я понимаю, что количество битов равно количеству битов, которое будет занимать один указатель?
PM MAIL   Вверх
vedr
Дата 12.8.2011, 13:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.8.2011

Репутация: нет
Всего: нет



Нет, 8 * sizeof(int) не всегда соответствует разрядности платформы. На многих 64-битных платформах sizeof(int) = 4. Это еще может зависеть от разрядности ОС.

да, это разрядность в битах

да, Вы правильно понимаете. для любого типа X выполняется: 
8 * sizeof(X*) = разрядность ОС

если установлена 32 битная ОС, то sizeof(X*) = 4, в 64-разрядной ОС sizeof(X*) = 8. 
с sizeof(int) такой гарантии нет.
PM MAIL   Вверх
Hagrael
Дата 12.8.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



vedr, понятно, спасибо за объяснение.
PM MAIL   Вверх
xvr
Дата 15.8.2011, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Кстати, не всегда в байте 8 бит  smile В частности для какого то из TI сигнальных процессоров (из серии TMS320 насколько помню) байт был 16ти битовым

PM MAIL   Вверх
bsa
Дата 15.8.2011, 18:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(vedr @  12.8.2011,  13:57 Найти цитируемый пост)
если установлена 32 битная ОС, то sizeof(X*) = 4, в 64-разрядной ОС sizeof(X*) = 8. 

это тоже не верно. Размерность указателя может отличаться. Например, у компиляторов от Борланд под DOS были дальние и ближние указатели. Так вот вторые были 32-х разрядными.
Если не ошибаюсь, под одну из 8-ми битных платформ компилятор IAR мог делать дальний указатель на функцию 24-х битным, а на данные только 16-ти...

Короче. Размерности типов очень сильно зависят от платформы. И какой-либо связи (кроме sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long), sizeof(float) <= sizeof(double) <= sizeof(long double)) между ними, имхо, нет.

Это сообщение отредактировал(а) bsa - 15.8.2011, 18:06
PM   Вверх
slavenk
Дата 27.8.2011, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



На данный момент приведенная статья устарела, вот ссылки на новые статьи
Что такое size_t иptrdiff_t
64-битный конь, который умеет считать
20 ловушек переноса C++ кода на 64-битную платформу
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.