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

Сдвиг влево на один бит - C++

Восстановить пароль Регистрация
 
Sacha080895
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 31
29.04.2014, 22:36     Сдвиг влево на один бит #1
C++
1
2
3
4
5
6
7
void Bitstring::shl() 
{
    int carry=!!(str[1]&0x80000000);    
    str[0]<<=1;                         
    str[0]|=carry;                      
    str[1]<<=1;                         
}

Объясните пожалуйста что значит это "str[1]&0x80000000"
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 22:36     Сдвиг влево на один бит
Посмотрите здесь:

C++ Сдвиг символа влево
C++ Циклический сдвиг массива влево
C++ Циклический сдвиг массива влево
Сдвиг влево C++
Многократный сдвиг массива влево C++
C++ Логический сдвиг влево
C++ массив, сдвиг влево
Сдвиг слов влево C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
29.04.2014, 23:17     Сдвиг влево на один бит #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sacha080895 Посмотреть сообщение
что значит это "str[1]&0x80000000"

В компьютере информация хранится в виде набора битов(по мнению программиста, но это уже другая тема), то есть в виде нулей и единиц(двоичная система счисления). 0x означает, что далее идет число в 16-ричной системе счисления. "&" означает побитовое "и" ( конъюнкция ).

str[1] & 0x80000000 делает побитовое "и" для этих двух чисел

0x80000000 = 2147483648 в десятичной = 1000 0000 0000 0000 0000 0000 0000 0000 в двоичной
если например str[1] это число 1111 1111 1111 1111 1111 1111 1111 1111

то в результате получим число
1111 1111 1111 1111 1111 1111 1111 1111 &
1000 0000 0000 0000 0000 0000 0000 0000
=
1000 0000 0000 0000 0000 0000 0000 0000

то есть результат побитового "и" только тогда 1, когда оба разряда 1, проще говоря число 0x80000000 обнуляет все разряды, кроме самого старшего(31го, нумерация с нуля, всего 32 разряда в 4 байтовом целом, 4 байт = 32 бит)

Если Windows, можете открыть калькулятор Вид-программист(Alt + 3). Там наглядно можете смотреть биты и менять системы счисления 2-10-8-16
Sacha080895
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 31
02.05.2014, 05:23  [ТС]     Сдвиг влево на один бит #3
TrueBit, Спасибо...очень помогли...
Yandex
Объявления
02.05.2014, 05:23     Сдвиг влево на один бит
Ответ Создать тему
Опции темы

Текущее время: 22:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru