Что не так с типами данных |
Здравствуйте, гость ( Вход | Регистрация )
Что не так с типами данных |
vankleef |
4.6.2011, 23:35
Сообщение
#1
|
Студент Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: 1 |
есть вот такой код
компилится все отлично, без ошибок. но ведь значение int'a в 10000000 превосходит его предел как в знаковом, так и в беззнаковом варианте. так вот почему это работает? |
|
|
alex977 |
5.6.2011, 0:08
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 310 Регистрация: 19.6.2008 Из: Россия, МО, г.Мытищи Пользователь №: 206 Спасибо сказали: 77 раз(а) Репутация: 8 |
Возможно поможет - максимальное число для типа int
|
|
|
Iron Bug |
5.6.2011, 1:42
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
да, alex977, правильно указал на получение максимального int'а. на самом деле, битность зависит и от системы, и от компилятора. 2 байта - это гарантия ДЛЯ ВСЕХ компиляторов, в том числе для чистого С. это важно для совместимости кода разных компиляторов и при передаче данных. но это не означает, что данный конкретный компилятор будет юзать для типа int два байта. вообще, давно есть типы int16, int32, int64 (названия могут варьироваться слегка от компилятора к компилятору, но суть понятна). если нужна конкретика - юзай более точные типы данных.
|
|
|
maint |
5.6.2011, 6:19
Сообщение
#4
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
есть вот такой код
компилится все отлично, без ошибок. но ведь значение int'a в 10000000 превосходит его предел как в знаковом, так и в беззнаковом варианте. так вот почему это работает? даже если система 64-разрядная ? Инт от разряда системы зависит и не только. Поэтому в Сях и болтаются определения MAX_INT, MAXINT или INT_MAX. Покопайтесь в хедерах, много интересного |
|
|
Litkevich Yuriy |
5.6.2011, 6:36
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Если INT 4-х байтный и знаковый, то максимум = 2 147 483 647, а у тебя всего 10 000 000
|
|
|
vankleef |
5.6.2011, 9:55
Сообщение
#6
|
Студент Группа: Участник Сообщений: 74 Регистрация: 21.10.2010 Пользователь №: 2134 Спасибо сказали: 9 раз(а) Репутация: 1 |
|
|
|
Litkevich Yuriy |
5.6.2011, 10:05
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
BRE |
5.6.2011, 10:17
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Не забывайте про 64-битные платформы.
Цитата $ cat a.cpp #include <iostream> int main( int, char ** ) { std::cout << "sizeof char = " << sizeof( char ) << std::endl; std::cout << "sizeof short = " << sizeof( short ) << std::endl; std::cout << "sizeof int = " << sizeof( int ) << std::endl; std::cout << "sizeof long = " << sizeof( long ) << std::endl; return 0; } $ g++ a.cpp $ ./a.out sizeof char = 1 sizeof short = 2 sizeof int = 4 sizeof long = 8 $ g++ -v Используются внутренние спецификации. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.0/lto-wrapper Целевая архитектура: x86_64-unknown-linux-gnu Параметры конфигурации: /build/src/gcc-4.6-20110513/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --disable-multilib --disable-libstdcxx-pch --enable-checking=release Модель многопоточности: posix gcc версия 4.6.0 20110513 (prerelease) (GCC) |
|
|
Текстовая версия | Сейчас: 20.4.2024, 15:51 |