Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Xserjik
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 2
#1

Побитовое вычитание

22.09.2013, 22:06. Просмотров 2034. Ответов 1
Метки нет (Все метки)

Здравствуйте. Задача сложить переменные, содержащих 2 машинных слова, используя только логические операции. Получилось такое чудо, однако результат на выходе стабильно в районе -13к.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int _tmain(int argc, _TCHAR* argv[])
{
 short v1=200,v2=150,m;
 int i,e=0;
  for (i=0;i<16;i++)
   {
    int y1,y2;
    y1=(v1&(1<<i))>>i;
    y2=(v2&(1<<i))>>i;
    m |= (y1^y2^e)<<i;
    if ((y1=0)&&(y2!=0))
        e=1;
    else if((y1!=0)&&(y2!=0))
    e=1;
 
        }
        cout<<"Rezultat:"<<m;
 
    system("pause");
Понимаю, что со сдвигами не до конца разобрался. Подскажите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 22:06
Ответы с готовыми решениями:

Побитовое чтение
Есть файл видео и мне известна его структура. Например структура следующая:...

Побитовое сравнение
Дан массив с десятичными числами, как сравнить (2ой,3ий,4ый и т.д.) бит 7...

Побитовое смещение
Здравствуйте, задача така стоит: Хочу сделать циклический побитовой сдвиг...

Побитовое замещение
Не могу что-то догнать. Есть int 0x 00 00 00 00 Как наиболее простым способом...

побитовое увеличение
Здравствуйте уважаемые пользователи. Это моя первая тема. Собственно суда я...

1
Buckstabue
177 / 126 / 24
Регистрация: 12.01.2012
Сообщений: 624
22.09.2013, 23:13 #2
Текст программы почти не читал, но хочу сразу сказать: не стоит забывать, что существует знаковый и беззнаковый сдвиги. Если у вас тип перменной не имеет префикса unsigned, то будет использоваться знаковый сдвиг, который не берет в расчет первый знаковый бит

Добавлено через 21 минуту
Мое пятиминутное решение таково, могут быть и ошибки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    unsigned int x = 100, y = 100, summ = 0, mask = 1;
    bool rest; // флаг переноса на следующий разряд
 
    for (mask = 1, rest = false; mask != 0; mask <<= 1 )
    {
        summ |= (x & mask) ^ (y & mask);
        if (rest)
            summ ^= mask;
        if ((x & mask) && (y & mask))
            rest = true;
        else
            rest = false;
    }
 
    std::cout << summ << std::endl;
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 23:13

Побитовое представление числа
Добрый вечер, подскажите, пожалуйста, каким образом можно сформировать число из...

Побитовое считывание файла
Стоит задача: Дан начальный файл любого формата (mp3,avi, и т.д.) ...

Побитовое представление числа.
Всем привет, подскажите пожалуйста, нужно: Написать программу, которая...


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

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

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