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

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

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

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

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

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



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

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

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

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

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

Почему строка, считанная из файла и такая же строка в программе не равны, хотя они, вроде бы, одинаковы? - C++
Есть две строки. MSK="Москва" и from, считанная из текстовика, через getline Для проверки вывожу эти обе строки, на первый взгляд...

дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. - C++
Будьте добры,помогите с решением задачи: дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка...

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н - C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо...

Даны строка S, символ C и строка S0. Необходимо после каждого вхождения символа C в строку S вставить строку S0 - C++
Есть код... string s, s0; char c; cout << "Введите строку s, s0 и символ c: "; getline(cin, s); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.12.2012, 18:05 #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;
}
0
Altafard
1 / 1 / 0
Регистрация: 05.04.2013
Сообщений: 26
19.04.2013, 11:25 #3
lemegeton, не могли бы вы прокомментировать код, чтобы развеять все неясности, а то я не совсем понимаю, как программа работает...
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2013, 11:43 #4
Цитата Сообщение от Adm!n Посмотреть сообщение
Кто-нибудь объясните что такое 64 битовая строка?
Это строка, в которой на символ отводится не 1 и даже не 2 байта, а сразу 8. Зверский "галактический уникод" с потенциальной поддержкой всех систем письменности от древних до современных не зависимо от планеты происхождения.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 11:43
Привет! Вот еще темы с ответами:

Преобразование строка-число-строка - C++
Здравствуйте, можете объяснить или показать на примере, как можно из строки извлечь числа, чтобы потом можно было с ними работать и каких...

Строка string и строка char - C++
Ребят помогиме. В общем задание такое дана строка типа string и строка char которая содержит символ к. В общем если в строке типа String ...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.04.2013, 11:43
Ответ Создать тему
Опции темы

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