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

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

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

Вот код программы:
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 ;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
24.06.2012, 13:34     Побитовый сдвиг #11
вот пример -

1111101 >> 1 = 0111110
1111101 >> 2 = 0011111
1111101 << 1 = 1111010
1111101 << 2 = 1110100
ValeryS
Модератор
6378 / 4844 / 442
Регистрация: 14.02.2011
Сообщений: 16,066
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++
Побитовый сдвиг C++
Как происходит побитовый сдвиг? C++

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

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

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