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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465
#1

Побитовый сдвиг - C++

24.06.2012, 11:55. Просмотров 1416. Ответов 12
Метки нет (Все метки)

Добрый день, помогите пожалуйста с побитовым сдвигом вправо, не получается добиться верной работы, укажите на ошибку пожалуйста, спасибо!

Вот код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
int main ()
{
    setlocale (0, "");
  int r,a,i,w[32];
  system ("cls");
  printf("Введите десятичное число: "); scanf("%d",&a);
  memset(w,0,sizeof(w));
  for(i=0;i<32;i++) w[i]=((a>>i)&1);
  cout<<"Число "<<a<<" в двоичной системе счисления: ";
  for(i=31,r=0;i>=0;i--)
  {
    if((w[i]==1)||(r==1))
    {
      printf("%d",w[i]);
      r=1;
    }
  }
   cout<<"\nЧисло "<<a<<" в шестнадцатиричной системе счисления: ";
   printf ("%x",a);
 
   puts ("");
   cout << "На сколько хотите двинуться?";
   int sd=0;
   cin >> sd;
   a=a>>sd;
   cout<<"\nЧисло "<<a;
   memset(w,0,sizeof(w));
  for(i=0;i<32;i++) w[i]=((a>>i)&1);
    cout<<"\nЧисло "<<a<<" в двоичной системе счисления: ";
  for(i=31,r=0;i>=0;i--)
  {
    if((w[i]==1)||(r==1))
    {
      printf("%d",w[i]);
      r=1;
    }
  }
   cout<<"\nЧисло "<<a<<" в шестнадцатиричной системе счисления: ";
   printf ("%x",a);
 
  
 printf("\n\nНажмите любую клавишу для выхода");
 getch();
 return 0 ;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 11:55     Побитовый сдвиг
Посмотрите здесь:

Побитовый сдвиг - C++
Непонятна часть программы с 24 по 45 строку. Помогите разобраться, пожалуйста. #include &lt;iostream&gt; using namespace std; const int...

Побитовый сдвиг - C++
Выполнение данного кода приравнивает asd к нулю. Хотя должно к единице, судя по моим вычислениям. char asd = 10 &amp; 2 &gt;&gt; 1; 1010 ...

Побитовый сдвиг - C++
#include &lt;iostream&gt; using namespace std; int main(int argc, char** argv) { int a,b,c,i; cin &gt;&gt;a; cin &gt;&gt;c; cin &gt;&gt;b; do...

Побитовый сдвиг - C++
Столкнулся с проблемой. У меня есть ключ - 0x1A305B98 Из него я получаю параметр путем int parm = (0x1A305B98 &gt;&gt; 20) &amp; 0x1F;// = 3 ...

Побитовый сдвиг - C++
есть допустим переменная unsigned char data = 0b10111011; Как можно сделать за 4 шага по битовый сдвиг на двух половинах как...

Побитовый сдвиг массива - C++
Есть двумерный массив int massiv;Нужно сдвинуть первый элемент массива в конец, а все остальные соответственно вперед. В цикле это...

Побитовый сдвиг влево и вправо - C++
Что выполнится быстрее - сдвиг влево или сдвиг вправо? И как замерить время выполнения каждой из операций в коде? Добавлено через 2...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexus777
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 19
24.06.2012, 13:14     Побитовый сдвиг #2
а что вас не устраивает? вроде бы все правильно
допустим было 410 = 1002
сдвигаем на 2бита вправо станет 12=110
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465
24.06.2012, 13:14  [ТС]     Побитовый сдвиг #3
nexus777, двоичное представление неверно
nexus777
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 19
24.06.2012, 13:21     Побитовый сдвиг #4
покажите тест, на котором программа работает неверное
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465
24.06.2012, 13:22  [ТС]     Побитовый сдвиг #5
nexus777, 125 число
nexus777
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 19
24.06.2012, 13:25     Побитовый сдвиг #6
да все верно) 12510 = 11111012
Миниатюры
Побитовый сдвиг  
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465
24.06.2012, 13:26  [ТС]     Побитовый сдвиг #7
nexus777, а сдвиньтесь на 1 бит?
nexus777
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 19
24.06.2012, 13:29     Побитовый сдвиг #8
и опять же все верно) вы видимо неправильно поняли операцию сдвига. http://msdn.microsoft.com/ru-ru/library/8xftzc7e.aspx
Миниатюры
Побитовый сдвиг  
kristi1
10 / 10 / 1
Регистрация: 07.03.2010
Сообщений: 465
24.06.2012, 13:30  [ТС]     Побитовый сдвиг #9
nexus777, а в чем тогда я ошибаюсь, расскажите пожалуйста?
nexus777
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 19
24.06.2012, 13:33     Побитовый сдвиг #10
я незнаю почему Вы думаете что двоичное представление неправильно. Операция побитовый сдвиг вправо. Было 11111110 станет 01111111( если сдвинуть на один бит ) если двигать на 2бита то 00111111 и т д
neske
1473 / 840 / 72
Регистрация: 26.03.2010
Сообщений: 2,876
24.06.2012, 13:34     Побитовый сдвиг #11
вот пример -

1111101 >> 1 = 0111110
1111101 >> 2 = 0011111
1111101 << 1 = 1111010
1111101 << 2 = 1110100
ValeryS
Модератор
6536 / 5002 / 460
Регистрация: 14.02.2011
Сообщений: 16,635
24.06.2012, 13:49     Побитовый сдвиг #12
Цитата Сообщение от neske Посмотреть сообщение
1111101 >> 1 = 0111110
Не всегда !!!
для беззнаковых
а для знаковых копируется бит знака
C++
1
2
3
4
5
 unsigned char  a= 0x80
a>>1 // =0x40;
 
signed char a=0x80;
a>>1 //=0xC0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 14:02     Побитовый сдвиг
Еще ссылки по теме:

Как происходит побитовый сдвиг? - C++
for(int i = 0; i &lt; 10; i ++){ if (i &amp; (1 &lt;&lt; j)) cout &lt;&lt; i &lt;&lt; endl; }

Как реализовать правильный побитовый сдвиг? - C++
Всем привет! У меня тупик в неожиданном месте) Я имею пару чаров и должен из них собрать int: char a1 = 224; char a2 = 18; ...

Не могу понять, как работает побитовый сдвиг - C++
Есть вот такой код: int invar, wv1, wv2, et, yt, resv; invar = 14; wv1 = invar &gt;&gt; 4; printf(&quot;%i\n&quot;, wv1); wv1 = wv1 &lt;&lt; 28; ...

Реализовать функцию, которая осуществляет циклический побитовый сдвиг вправо на n позиций - C++
Реализовать функцию, которая осуществляет циклический побитовый сдвиг вправо на n позиций. При циклическом сдвиге вправо на 1 все биты...

Получить введенное значение используя операции сложения, вычитания и побитовый сдвиг влево - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int N; //количество чисел cout &lt;&lt; &quot;Amount of numbers:...


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

Или воспользуйтесь поиском по форуму:
neske
1473 / 840 / 72
Регистрация: 26.03.2010
Сообщений: 2,876
24.06.2012, 14:02     Побитовый сдвиг #13
ValeryS, ну, я это и имел в виду)
Yandex
Объявления
24.06.2012, 14:02     Побитовый сдвиг
Ответ Создать тему
Опции темы

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