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

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

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

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

17.12.2012, 16:27. Просмотров 443. Ответов 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++
Строка C++
Строка С++ C++
дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. C++
Строка string и строка char C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
Дана строка символов. Проверьте,является ли данная строка палиндромом C++
Даны строка S, символ C и строка S0. Необходимо после каждого вхождения символа C в строку S вставить строку S0 C++
Преобразование строка-число-строка C++
C++ Дана строка. Подсчитать сколько раз первая строка входит во вторую
Почему строка, считанная из файла и такая же строка в программе не равны, хотя они, вроде бы, одинаковы? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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-строка
Ответ Создать тему
Опции темы

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