![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Не могу понять, почему я не могу присвоить double число 1<<32? Я же не с интом работаю, и sizeof честно говорит 8 байт, в чем проблема?
Система WinXP home (ясное дело win32) компилирую VS2003 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
Добавлено @ 07:34 и интересно почему твой компилер не дал тебе по рукам Это сообщение отредактировал(а) chaos - 1.2.2006, 08:41 |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Оно не заработает. 1<<32 - это ещё int, а не double. Решение
способ (2) имхо предпочтительнее. 0x1p32 это уже float constant. а 1LL <<32 это ещё integer constant. Добавлено @ 08:14 (0x1p32 это 1 * 2 ** 32 - это вообще фича c99, поэтому с++ компилятор может её не держать(комо в с++ стрикт не держит, в с99 держит, gnu c держит, как обстоят с этим делом дела у msvc не знаю. Но если 0x1p32 в нём есть, то это одназначно то, что нужно)). Добавлено @ 08:18 (только long long (1LL) он тоже не стандартен строго говоря. Если 1LL вызывает ошибку, то можно что-то типа __int64(1) << 32, или __i64(1) << 32. Вообщем shift'ить нужно 64 и более битовое число) Добавлено @ 08:20 Он максимум что warning выдаст. Comeau: "ComeauTest.c", line 1: warning: shift count is too large GCC: a.cpp:7: warning: left shift count >= width of type Это сообщение отредактировал(а) Mayk - 1.2.2006, 08:15 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ну или вот так ещё.
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Mayk
Спасибо за разъяснения. Тут проблема была не в том, что мне нужно именно получить число 2^32, а в том, что я не понимал почему мне не двинуть больше четырех байт. Мысль о том, что я работаю с интом, а не с double пришла только после того как я проникся содержанием твоего сообщения В силу того что сдвиг на 32 бита я привел как пример, (мне же надо лаконично записывая двигать разное число) я решил использовать __i64(1) << 32. Жаль это сводит переносимость кода только к компиляторам msvc, но пока этого хватит, потом подумаю над тем как изменить кастинг, чтобы он был понятен большему числу компиляторов -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |