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

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

Войти
Регистрация
Восстановить пароль
 
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,219
#1

Побитовые операции - C++

15.04.2012, 12:14. Просмотров 703. Ответов 5
Метки нет (Все метки)

Задача должна быть реализована в с++ но пришлось временно писать в дельфи. суть такая: входящие число в диапазоне 0-n (8 байт) выходящие группа чисел в виде нескольких байт с помощью которых можно представить число.

Пример: входящие 65535 выходящие два числа 255 и 127.

Проблемма заключаеться в том что я не уверен правильно ли выходят числа а именно в каком порядке их надо вставить. Ну допистим я ввел число 65535 откомпелировал программу и как компелятор запишет это число в файле *.exe* или *.dll* без разници? 255 и потом 127 или 127 а 255 ? Еще не очень понятно как в с++ работать с битми (само собой по маске) но а допустим я щас реализовал все в массиве типа byte в с++ буду использовать U.. Char

ПРЕОБРАЗОВАТЬ ДЕСЯТИЧНОЕ В БАЙТЫ.rar

Delphi
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label5: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses Math;
 
{$R *.dfm}
const
  _SIZE = 8*2*2;
var
 m: array [0.. _SIZE - 1] of byte;
 i: Integer = 0;
 
//разложить по бйтам 
 
procedure return;
 var
  t, c: Integer;
begin
 c:=8;
  Form1.Edit2.Clear;
  for t:=0 to _SIZE - 1 do
  begin
 
    if  t = c then
    begin
     Form1.Edit2.Text:=Form1.Edit2.Text + ' ';
      c:= c+8;
    end;
    Form1.Edit2.Text:=Form1.Edit2.Text + IntToStr(m[t]);
  end;
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 label step;
  var
   x, y, z: Real48;
begin
  i:=0;
  x:=StrToInt(Edit1.Text); //ввод числа 2147483648
step:
  y:= x/2;
 
  z:= trunc(y);   // z:= x mod 2;
  z:= y - z;
 
  if z = 0 then
  begin
    m[i]:=0;
  end
  else
    m[i]:=1;
  x:=y;
  if y < 1 then
  begin
    Label1.Caption:='Бит: ' + IntToStr(i);
    return;
    Exit;
  end;
  if i > _SIZE then
    ShowMessage('Ошибка! Выход за пределы');
  inc(i);
  goto step;
end;
 
//преобразовать восемь разрядов в байт
procedure BitToByte();
 var
  i: Integer;
  bit: Byte;
  r2: Integer;
  Result: Extended;
  f,r3, n:  Integer ;
begin
 f:=0;
  for i:=0 to 7 do
  begin
   bit:=m[i];
   Result:=Power(bit*2, i); //bitx2^i (1*2^i)
   n:=TRUNC(Result);
   f:= f + n;
  end;
  Form1.Edit3.Text:=FloatToStr(f);
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.Click;
  BitToByte();
end;
 
end.
C
1
  //лад потом вставлю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 12:14     Побитовые операции
Посмотрите здесь:

Побитовые операции - C++
Всем доброго утра. Дана такая задача: есть два чсила,поменять местами 2 последние цифры этих чисел между собой, т.е. 2 последних Х заменить...

Побитовые операции в С++ - C++
Здраствуйте. Нужно написать программу которая будед считывать количество единичек (1) в побитовом представлении числа. Пример input: 15 ...

Побитовые операции - C++
Помогите решить несколько задач по битовым операциям,они все малы по реализации. И объяснить начиная с 3 задачи,что нужно сделать?А то не...

Побитовые операции - C++
Помогите пожалуйста, никак не могу справиться с этой задачкой. Выделить из числа x поле шириной n битов, начиная с позиции p, и...

Побитовые операции - C++
1-программа #include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { char g; /* ??? ????????? */ char s; /* ??????? ?????? */ ...

Побитовые операции - C++
Помогите, не могу понять как сделать эту программу( unsigned ChangeGroupBits(unsigned x, unsigned y, int n1, int n2); ChangeGroupBits–...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
15.04.2012, 12:35     Побитовые операции #2
На С++ эта задача легко реализуется через union
C++
1
2
3
4
5
6
7
8
9
10
11
union IntByte
{
long int a;
char b[4];
};
int main()
{
    IntByte x;
    x.a=65535;
    printf("%u %u %u %u",x.b[3],x.b[2],x.b[1],x.b[0]);
}
-=ЮрА=-
Заблокирован
Автор FAQ
15.04.2012, 13:40     Побитовые операции #3
Цитата Сообщение от n971030 Посмотреть сообщение
Пример: входящие 65535 выходящие два числа 255 и 127.
65535 = 1111111111111111 (16-ть единиц 2 байта)
255 = 11111111 (8-мь единиц 1 байт)
127 = 1111111 (7-мь единиц 1 байт)

Где логика 16-ть единиц = 8 + 7??? Куда ещё 1 бит пропадает???
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 13:53     Побитовые операции #4
использовать goto - это не очень хорошо
n971030
163 / 95 / 1
Регистрация: 23.01.2010
Сообщений: 1,219
15.04.2012, 19:07  [ТС]     Побитовые операции #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
65535 = 1111111111111111 (16-ть единиц 2 байта)
255 = 11111111 (8-мь единиц 1 байт)
127 = 1111111 (7-мь единиц 1 байт)

Где логика 16-ть единиц = 8 + 7??? Куда ещё 1 бит пропадает???
да дело в том что проект пока на стадии разработки. но мы исправимся

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
На С++ эта задача легко реализуется через union
C++
1
2
3
4
5
6
7
8
9
10
11
union IntByte
{
long int a;
char b[4];
};
int main()
{
    IntByte x;
    x.a=65535;
    printf("%u %u %u %u",x.b[3],x.b[2],x.b[1],x.b[0]);
}
и он мне выведит? отдельно байты?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 20:45     Побитовые операции
Еще ссылки по теме:

Побитовые операции - C++
От друга услышал идею о побитовой сортировки имен (например). К примеру, если у нас набор структурных переменных с анкетами работников, и...

Побитовые операции - C++
Пожалуйста, объясните как работают побитовые операторы &amp; и |. Например идет: i=03; j=01; k=i &amp; j; // k=1 k=i | j; // k=3 А почему...

Побитовые операции на с++ (<< и >>) - C++
Подскажите пожалуйста, такая задача - побитовый сдвиг на заданное количество символов сдвигает только цифры, как сделать чтобы он то же...

Побитовые операции - C++
Задача: битовый образ 8*8 задается при помощи 8 байт, каждый байт состоит, соответственно, из 8 бит, бит={0,1}; при помощи побитовых...

Побитовые операции - C++
Здравствуйте уважаемые читатели форума! СОвсем не представляю как сделать простейшую програмку на С++. Нужно вычислить номер позиции...

Побитовые операции - C++
Задание: Дано целое неотрицательное число. Определить количество составляющих его шестнадцатеричных цифр, содержащих в двоичном...


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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
15.04.2012, 20:45     Побитовые операции #6
Цитата Сообщение от n971030 Посмотреть сообщение
и он мне выведит? отдельно байты?
А куда же он денется.
union - это объединение, т.е. переменные накладываются друг на друга.
Yandex
Объявления
15.04.2012, 20:45     Побитовые операции
Ответ Создать тему
Опции темы

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