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

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

Войти
Регистрация
Восстановить пароль
 
broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
#1

Логический сдвиг влево - C++

31.07.2013, 14:40. Просмотров 843. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
unsigned __int64 number = 239176053778592;
    ClongNumber c(number);
    c.print();
 
    for(int i = 0; i < 18; i++)
    {
        unsigned __int64 number_new = number << i;
        ClongNumber c_new1(number_new);
        std::cout << "i " << i << std::endl;
        c_new1.print();
    }
Логический сдвиг влево

Почему при i = 16 начинает чушь выдавать??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 14:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Логический сдвиг влево (C++):

Где и когда уместно применять операции << (сдвиг влево) и >> (сдвиг вправо)? - C++
Кто может привести пример , когда нужно использовать операции: 1) &lt;&lt; сдвиг влево 2) &gt;&gt; сдвиг вправо

Сдвиг влево - C++
Напишите программу, которая циклически сдвигает элементы массива влево (0-й элемент становится последним, 1-й становится 0-м, ...,...

Сдвиг символа влево - C++
Помогите осуществить сдвиг символа (буквы) из циклического алфавита на n влево. То есть, например, на вход методу дается буква 'A' и число...

массив, сдвиг влево - C++
нужен код программы, которая сдвигает элементы массива на 1 влево, тоесть было 1 5 6 8 9, стало 5 6 8 9 1 ... через функцию(в main только...

Циклический сдвиг влево - C++
Помогите написать программу которая будет осуществлять циклический сдвиг влево введённого числа на N разрядов (например, при сдвиге числа...

Сдвиг слов влево - C++
В переменной a есть строка из 5 слов. Как в цикле сделать сдвиг каждого слова влево и вывести каждый измененный результат? Например...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
31.07.2013, 14:50  [ТС] #2
Он вроде инвертируется, а потом добавляет единицу, но ведь он должен просто логически сдвинуть биты и всё. Это же беззнаковое целое!
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.07.2013, 14:54 #3
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Логический сдвиг
это что-то новенькое. Судя по названию, результат должен быть булевым числом

Добавлено через 1 минуту
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Почему при i = 16 начинает чушь выдавать??
Это уже вопрос к Вашему
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
c_new1.print();
0
broDiaga_cpp
22 / 12 / 1
Регистрация: 20.02.2010
Сообщений: 180
31.07.2013, 15:03  [ТС] #4
Функция print() выдаёт всё верно. Она выводит все 64 разряда числа.

Добавлено через 6 минут
Проблема решена. Ошибка была в конструкторе класса ClongNumber.
Когда разбивал на степени - брал абсолютное значение числа.
Соответственно, когда старший бит заполнялся единицей - он игнорировался.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.07.2013, 15:08 #5
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Функция print() выдаёт всё верно.
Если так уверены, то попробуйте вывести двоичное представление числа через std::bitset скажем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <bitset>
 
int main() {
    
    
    const unsigned long long value = 239176053778592ULL;
    
    std::bitset<64> bs(value);
    std::cout << bs << std::endl;
    std::cout << (bs << 16) << std::endl;
    return 0;
}
https://ideone.com/9ajA0c

Добавлено через 42 секунды
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Проблема решена. Ошибка была в конструкторе класса ClongNumber.
Вот и славно
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 15:08
Привет! Вот еще темы с ответами:

Сдвиг массива влево на n знаков - C++
пишу на C++ не могу найти ошибку в коде. помогите я не очень силен только учусь))) спасибо!!! вот код #include&lt;iostream&gt; ...

Циклический сдвиг массива влево - C++
Дан массив y1, ... , y20. Сформировать массив Z1, ... , Z20, элементы которого соответствуют элементам yi , сдвинутым на одну позицию...

Циклический сдвиг массива влево - C++
условие: задан массив целочисленный состоящий из 10 элементов нужно сделать циклический сдвиг влево так чтобы первый максимум стал на...

Сдвиг влево на один бит - C++
void Bitstring::shl() { int carry=!!(str&amp;0x80000000); str&lt;&lt;=1; str|=carry; str&lt;&lt;=1; } ...


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

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

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