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

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

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

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

15.04.2012, 12:14. Просмотров 682. Ответов 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++ Побитовые операции
Побитовые логические операции C++
C++ Побитовые операции
C++ Побитовые операции
Побитовые операции C++
C++ Побитовые операции и матрицы
Побитовые операции C++
C++ Побитовые операции
C++ Побитовые операции
C++ Побитовые операции на с++ (<< и >>)
C++ Побитовые операции
Побитовые операции C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6180 / 5783 / 1872
Регистрация: 18.12.2011
Сообщений: 14,774
Завершенные тесты: 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,175
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]);
}
и он мне выведит? отдельно байты?
zss
Модератор
Эксперт С++
6180 / 5783 / 1872
Регистрация: 18.12.2011
Сообщений: 14,774
Завершенные тесты: 1
15.04.2012, 20:45     Побитовые операции #6
Цитата Сообщение от n971030 Посмотреть сообщение
и он мне выведит? отдельно байты?
А куда же он денется.
union - это объединение, т.е. переменные накладываются друг на друга.
Yandex
Объявления
15.04.2012, 20:45     Побитовые операции
Ответ Создать тему
Опции темы

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