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

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

Войти
Регистрация
Восстановить пароль
 
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
#1

Странное взаимовлияние побитовых операций - C++

23.02.2013, 23:41. Просмотров 278. Ответов 4
Метки нет (Все метки)

Запускаю в VS C++ 2012
C
1
2
3
4
5
6
    int shift = 30;
    long long x = 1<<shift;
    long long y = ~0;
    //int x = 1<<shift;
    //int y = ~0;
    printf("%x\n%x\n", x, y);
Получаю
Код
40000000
0
Меняю shift на 31, получаю
Код
80000000
ffffffff
Получается, что значение y меняется в зависимости от того, что я делаю с x. Если поменять тип на int, такого безобразия не наблюдается. Что бы это могло быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странное взаимовлияние побитовых операций (C++):

Приоритет побитовых операций - C++
Всем привет. Столкнулся с непоняшкой: // Объявляем два массива и инициализируем их unsigned char A={0xFF, 0x03, 0x00,...

Пояснение побитовых операций - C++
Прошу объяснить на пальцах/на примере что значит следующая строчка, каким именно образом осуществляется сдвиг вправо на 4 разряда? что...

Перегрузка побитовых логических операций - C++
Всем привет! Хотел спросить, можно ли как нибудь перегрузить логическую операцию &quot;И - &amp;&quot; так, чтобы в ней участвовало 2 аргумента? Если...

Установка бита с использованием побитовых операций - C++
Есть следующая программа, которой задается само число/символ (unsigned char), переводит программа в двоичный вид, и бит, который был задан...

Определение остатка от деления с помощью побитовых операций - C++
Народ, недавно начал изучать С++ и наткнулся на один пример. Никак не могу додуматься как его решить. Надеюсь тут есть старшие товарищи...

Перевод Unsigned char в двоичный вид с использованием побитовых операций - C++
Вводится с клавиатуры переменная типа unsigned char, с помощью побитовых операций переводится в двоичный вид и выводится на экран....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
23.02.2013, 23:53 #2
Цитата Сообщение от dikanev Посмотреть сообщение
Что бы это могло быть?
Неправильное использование спецификатора %x. Он используется для беззнаковых целых. Во-вторых, раз вы используете long long тогда желательно указывать спецификаторы длины, перед спецификатором типа.
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
24.02.2013, 00:25  [ТС] #3
Слегка изменил код:
C
1
2
3
4
5
    int shift = 30;
    unsigned long long int x = 1<<shift;
    unsigned long long int y = ~0;
    unsigned int z = y;
    printf("%x\n%x\n%x\n", x, y, z);
Получил
Код
40000000
0
ffffffff
Дописывание unsigned не помогло. Похоже, дело в неумении printf'а со спецификатором %x выводить long long целые числа.
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
24.02.2013, 00:27 #4
Цитата Сообщение от dikanev Посмотреть сообщение
Похоже, дело в неумении printf'а со спецификатором %x выводить long long целые числа.
Я же написал:
Цитата Сообщение от HighPredator Посмотреть сообщение
раз вы используете long long тогда желательно указывать спецификаторы длины, перед спецификатором типа.
То есть должно быть так:
C
1
printf("%llx\n%llx\n%llx\n", x, y, z);
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
24.02.2013, 00:46  [ТС] #5
Теперь понял, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2013, 00:46
Привет! Вот еще темы с ответами:

Перевод десятичного вещественного числа в двоичное путем побитовых операций (Делить на 2 нельзя) - C++
Нужно написать код на С++, который переводит вещественное десятичное число в двоичное с помощью битовых операторов(Сдвиги, &amp;, | и т.п) ...

Создать функцию для вывода на экран целого числа в двоичной системе счисления с применением побитовых операций. - C++
Создать функцию для вывода на экран целого числа в двоичной системе счисления с применением побитовых операций. Использовать функцию при...

Программа для демонстрации работы побитовых операторов не компилируется - C++
Добрый вечер всем! Я учусь программированию на С++. Написал небольшую программу из книжки. Программа для демонстрации работы побитовых...

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100 - C++
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь


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

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

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