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

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

Войти
Регистрация
Восстановить пароль
 
Adm!n
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 17
#1

64-строка - C++

17.12.2012, 16:27. Просмотров 450. Ответов 3
Метки нет (Все метки)

Кто-нибудь объясните что такое 64 битовая строка?



Дано такое задание:
Создать класс BitString для работы с 64-битными строкамию.Битовая строка должна быть представлена двумя полями типа ulong .должны быть реализовны все традиционные операции для работы с битами and,or,xor,not,и сдвиги shiftRight shiftLeft.

Как я понял:при переводе в двоичную систему число представляется 64-мя нулями и единицами. Просто каждое поле состоит из 32 битов, а вместе супер длинное число в 64.

Т.е. я введу с клавиатуры число, оно разобьется на два поля,с которыми можно проводить традиционные операции?так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2012, 16:27     64-строка
Посмотрите здесь:

Дана строка. Подсчитать сколько раз первая строка входит во вторую - C++
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например: вводим "при" (строка должна вводиться с клавиатуры, как на...

Дана строка символов. Проверьте,является ли данная строка палиндромом - C++
Парни нужна помощь,нужен код решения этой задачи на языке с++. Дана строка символов. Проверьте,является ли данная строка палиндромом.

Создать класс строка и производный класс битовая строка, не работает переопределение операций - C++
Здравствуйте уважаемые форумчане.Мне очень нужна помощь в разработке класса.Сам класс вроде работает но вот 1 задание к нему неработает...

Есть строка определенной длины. Вторая строка меньше первой. Найти точку в которой вторая строка входит в первую - Java SE
Условие: Есть строка определенной длины. Вторая строка меньше первой. Найти точку в которой вторая строка входит в первую.

Получить действительный матрицу А( n,m) Первая строка которого задана формулой C1j=2*j+3, вторая строка задается формулой С2j=2+1/j, а каждая следующая строка есть сумма предыдущих. - Turbo Pascal
Получить действительный матрицу А( n,m) Первая строка которого задана формулой C1j=2*j+3, вторая строка задается формулой С2j=2+1/j, а...

Событие SheetChange: последняя строка и выделенная строка является одинаковой величиной - Visual Basic .NET
Не срабатывает корректно событие. При вводе данных в следующую строку после последней, последняя строка и выделенная строка является...

В папках пропала строка меню,адресная строка и панель инструментов - Windows XP
У меня на компьюторе в папках пропала строка меню,адресная строка и панель инструментов.Подскажите как их вернуть? Причина пропажи строки...

Строка: Определить, содержит ли строка только символы 'а', 'Ь', 'с' или нет - Delphi
Дана строка. Определить, содержит ли строка только символы 'а', 'Ь', 'с' или нет.

Сортировка строк по году рождения (1945 - 1 строка, 1944 - 2 строка) - C#
Здравствуйте форумчане, необходима ваша помощь. Дан текстовый файл:" Kaligoev Paul Ignashevich 1997 School №76, Street 56, Astrakhan,...

Создать запись «Кинофильм» с полями: «Название» (строка), «Страна» (строка) - Turbo Pascal
В заголовок окна программы записать свои данные: имя, фамилию и номер варианта. - Для всех вариантов количество записей в массиве...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
17.12.2012, 18:05     64-строка #2
Цитата Сообщение от Adm!n Посмотреть сообщение
Т.е. я введу с клавиатуры число, оно разобьется на два поля,с которыми можно проводить традиционные операции?так?
Ну типа того.
Вот вам пример. Немного отличается от вашего задания, но думаю поправить осилите.
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
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
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <string>
#include <algorithm>
 
/**
 * ÁèòîâГ*Гї ñòðîêГ* ïðåäñòГ*âëÿåò ñîáîé ïîñëåäîâГ*òåëüГ*îñòü ГЎГЁГІ.
 * Г’Г*ГЄГ*Гї ñòðêòóðГ* Г¤Г*Г*Г*ûõ ïîìîãГ*ГҐГІ ïðåäñòГ*âëÿòü Г¬Г*îæåñòâГ* èëè Г°Г*áîòГ*ГІГј
 * Г± ГЎГЁГ*Г*Г°Г*ûìè Г¤Г*Г*Г*ûìè.
 * ÝëåìåГ*ГІГ» ГЎГЁГ*Г*Г°Г*îé ñòðîêè Г*óìåðóþòñÿ ïîäðÿä îò Г*óëÿ Г±ГЇГ°Г*ГўГ* Г*Г*ëåâî.
 */
class BitString {
 public:
  explicit BitString(size_t size) : size(size), sizeInBytes((size - 1) / 8 + 1),
    data(new unsigned char[sizeInBytes]) {
    clear();
  }
  BitString(size_t size, unsigned long value) : size(size),
    sizeInBytes((size - 1) / 8 + 1), data(new unsigned char[sizeInBytes]) {
    setLongValue(value);
  }
  BitString(const BitString &other) : size(other.size),
    sizeInBytes((size - 1) / 8 + 1), data(NULL) {
    copyFrom(other);
  }
  virtual ~BitString() {
    delete [] data;
  }
  void copyFrom(const BitString &other) {
    delete [] data;
    size = other.size;
    sizeInBytes = (size - 1) / 8 + 1;
    data = new unsigned char[sizeInBytes];
    for (int i = 0; i < sizeInBytes; ++i)
      data[i] = other.data[i];
    
  }
  size_t getSizeInBytes() const { 
    return sizeInBytes;
  }
  size_t getSize() const {
    return size; 
  }
  void setLongValue(unsigned long value) {
    clear();
    int i = 0;
    for (int i = 0; value > 0; value >>= 1, ++i)
      if (value & 1) setBit(i);
  }
  std::string toString() const {
    std::string result;
    for (int i = 0; i < getSizeInBytes(); ++i) {
      result += charToBin(data[i]);
    }
    return result;
  }
  void clear() {
    for (int i = 0; i < getSizeInBytes(); ++i) {
      data[i] = 0;
    }
  }
  void setBit(size_t i) {
    data[sizeInBytes - 1 - (i >> 3)] |= (1 << (i & 7));
  }
  bool getBit(size_t i) const {
    return data[sizeInBytes - 1 - (i >> 4)] & (1 << (i & 7)) != 0;
  }
  BitString &operator=(const BitString &other) {
    if (this != &other) {
      copyFrom(other);
    }
    return *this;
  }
 
  friend BitString operator&(const BitString &a, const BitString &b) {
    const BitString &smaller = a.getSize() > b.getSize() ? b : a;
    const BitString &larger = a.getSize() > b.getSize() ? a : b;
    BitString result(larger);
    for (int i = smaller.getSizeInBytes() - 1; i >=0; --i)
      result.data[i] &= smaller.data[i];
    return result;
  }
  friend BitString operator|(const BitString &a, const BitString &b) {
    const BitString &smaller = a.getSize() > b.getSize() ? b : a;
    const BitString &larger = a.getSize() > b.getSize() ? a : b;
    BitString result(larger);
    for (int i = smaller.getSizeInBytes() - 1; i >=0; --i)
      result.data[i] |= smaller.data[i];
    return result;
  }
  friend BitString operator^(const BitString &a, const BitString &b) {
    const BitString &smaller = a.getSize() > b.getSize() ? b : a;
    const BitString &larger = a.getSize() > b.getSize() ? a : b;
    BitString result(larger);
    for (int i = smaller.getSizeInBytes() - 1; i >=0; --i)
      result.data[i] ^= smaller.data[i];
    return result;
  }
  friend BitString operator!(const BitString &a) {
    BitString result(a.getSize());
    for (int i = a.getSizeInBytes() - 1; i >=0; --i)
      result.data[i] = ~a.data[i];
    return result;
  }
 
 private:
  static std::string charToBin(unsigned char value) {
    char result[] = "00000000";
    int i = 7;
    while (value > 0) {
      result[i--] = '0' + (value & 1);
      value >>= 1;
    }
    return result;
  }
  size_t size, sizeInBytes;
  unsigned char *data;
};
 
std::ostream &operator<<(std::ostream &stream, const BitString &bs) {
  return stream << bs.toString();
};
 
 
int main(int argc, char *argv[]) {
  BitString a(64, 0xF0F0F0F0), b(64, 0x00FF00FF);
  
  std::cout << a << std::endl << b << std::endl << (a & b) << std::endl << std::endl;
  std::cout << a << std::endl << b << std::endl << !(a & b) << std::endl << std::endl;
  std::cout << a << std::endl << b << std::endl << (a ^ b) << std::endl << std::endl;
  std::cout << a << std::endl << b << std::endl << (a | b) << std::endl << std::endl;
  
  std::cin.get();
  return 0;
}
Altafard
1 / 1 / 0
Регистрация: 05.04.2013
Сообщений: 26
19.04.2013, 11:25     64-строка #3
lemegeton, не могли бы вы прокомментировать код, чтобы развеять все неясности, а то я не совсем понимаю, как программа работает...
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2013, 11:43     64-строка #4
Цитата Сообщение от Adm!n Посмотреть сообщение
Кто-нибудь объясните что такое 64 битовая строка?
Это строка, в которой на символ отводится не 1 и даже не 2 байта, а сразу 8. Зверский "галактический уникод" с потенциальной поддержкой всех систем письменности от древних до современных не зависимо от планеты происхождения.
Yandex
Объявления
19.04.2013, 11:43     64-строка
Ответ Создать тему
Опции темы

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