Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
broDiaga_cpp
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181
1

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

31.07.2013, 14:40. Просмотров 1043. Ответов 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
Ответы с готовыми решениями:

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

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

Сдвиг символа влево
Помогите осуществить сдвиг символа (буквы) из циклического алфавита на n влево....

Сдвиг слов влево
В переменной a есть строка из 5 слов. Как в цикле сделать сдвиг каждого слова...

Функция: циклический сдвиг элементов массива влево
нужен код программы, которая сдвигает элементы массива на 1 влево, тоесть было...

4
broDiaga_cpp
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181
31.07.2013, 14:50  [ТС] 2
Он вроде инвертируется, а потом добавляет единицу, но ведь он должен просто логически сдвинуть биты и всё. Это же беззнаковое целое!
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.07.2013, 14:54 3
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Логический сдвиг
это что-то новенькое. Судя по названию, результат должен быть булевым числом

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

Добавлено через 6 минут
Проблема решена. Ошибка была в конструкторе класса ClongNumber.
Когда разбивал на степени - брал абсолютное значение числа.
Соответственно, когда старший бит заполнялся единицей - он игнорировался.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
31.07.2013, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 15:08

Циклический сдвиг влево
Помогите написать программу которая будет осуществлять циклический сдвиг влево...

Многократный сдвиг массива влево
У меня есть массив , к примеру : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18...

Сдвиг массива влево на n знаков
пишу на C++ не могу найти ошибку в коде. помогите я не очень силен только...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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