Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
#1

64битные типы - C++

07.06.2011, 18:24. Просмотров 418. Ответов 8
Метки нет (Все метки)

Почему в long long и unsigned __int64 не работает сдвил влево,вправо на более чем 31 бит.

такой код

C++
1
2
3
4
5
6
long long j;
 
    j=1<<63;
    
    
    cout<<j;
выдает 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2011, 18:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 64битные типы (C++):

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? - C++
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы: 1. Можете ли на понятным для...

Типы данных C++ - C++
Подскажите какие вещественные и целые типы самые большие и маленькие

типы данных - C++
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; cout &lt;&lt; summa &lt;&lt; endl; почему в результате 5, а не...

Типы Данных - C++
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных доступный в компиляторе visual c++ express edition 2010, по...

Типы данных - C++
Помогите пожалуйста решить проблему с типами данных. C++ только начинаю учить, поэтому не знаю, можно ли так сделать или нет. Нужно...

Стандартные типы С++ - C++
Какие стандартные типы существуют в С++? Входят ли void и real в этот список?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
07.06.2011, 18:26 #2
А проверь, что выдаёт (0 == j) ?
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:28  [ТС] #3
Ошибку,затем -368....10324

если unsigned __int j;
то 1475...1292
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
07.06.2011, 18:34 #4
Вообще-то приведение типа делается после операции, когда старшие разряды уже потеряны.
так работает?
C++
1
2
long long j = 1;
j <<= 63;
Добавлено через 2 минуты
Ну или так
C++
1
2
long long j;
j = static_cast<long long>(1) << 63;
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:34  [ТС] #5
Благодарствую!

а если сдвиг вправо?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
07.06.2011, 18:46 #6
MaXiDRoM_90, по умолчанию 1 имеет тип int, неудивительно, что при сдвиге int более, чем на 31 получается 0.
Решением будет явное указание типа константы.
C++
1
std::cout << (1LL << 63);
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:49  [ТС] #7
Да я уже воспользовался описанным выше кодом,спасибо.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
07.06.2011, 18:50 #8
Цитата Сообщение от MaXiDRoM_90 Посмотреть сообщение
а если сдвиг вправо?
А какие проблемы?
MaXiDRoM_90
11 / 11 / 1
Регистрация: 21.03.2010
Сообщений: 47
07.06.2011, 18:50  [ТС] #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
А какие проблемы?
>>= тупанул
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2011, 18:50
Привет! Вот еще темы с ответами:

типы данных - C++
какой диапазон данных у main, getch? и какой тип данных у getch?

Типы данных - C++
Ребят, можете мне помочь написать простенькую прогу на c++ где использовались бы все типы данных.Заранее большое спасибо.

Типы данных - C++
__int64 Z = pow(a,x); long double Y = 9/Z; cout&lt;&lt;Y //Y = 0 Как вывести подробней? Добавлено через 6 минут И при Y%Z не...

Типы переменных - C++
Какой тип переменных можно использовать для хранения символов?? например слово World


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.06.2011, 18:50
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru