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

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

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

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

31.07.2013, 14:40. Просмотров 828. Ответов 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 начинает чушь выдавать??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 14:40     Логический сдвиг влево
Посмотрите здесь:

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

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

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

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

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

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

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

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

Добавлено через 6 минут
Проблема решена. Ошибка была в конструкторе класса ClongNumber.
Когда разбивал на степени - брал абсолютное значение числа.
Соответственно, когда старший бит заполнялся единицей - он игнорировался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 15:08     Логический сдвиг влево
Еще ссылки по теме:

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

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

Многократный сдвиг массива влево - C++
У меня есть массив , к примеру : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Проходя по нему я проверяю является ли число...

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


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 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.
Вот и славно
Yandex
Объявления
31.07.2013, 15:08     Логический сдвиг влево
Ответ Создать тему
Опции темы

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