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

Шифрация битов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выход на биты в поразрядных операторах http://www.cyberforum.ru/cpp-beginners/thread633033.html
Здравствуйте. Обьясните пожалуйста есть код: #include <iostream.h> #include <conio.h> #pragma argsused void Bits(unsigned); int main() {unsigned x;
C++ Предоставить пользователю возможность выбрать цвет фона и текста в консоле Помогите пожалуйста написать программу, которая бы предоставляла пользователю возможность выбрать цвет фона и текста консоли, с помощью операторов: switch и system ("color"). http://www.cyberforum.ru/cpp-beginners/thread632980.html
C++ Построение сети в теории, на основе сокетов
Построение сетей на основе soket api - протокол только TCP\IP Раскажите в теории как основано это, кодов не надо так токово, просто какие и в каком порядке функции вызываються наприемр.
C++ Templates (composition). exception handling run-time error
Код компилируется. Если делать циклы для push and pop размера такого чтоб не превышало размеры Стока то все работает нормально если циклы больше размера стока то выходит вот такая картинка в консоле (см. принт скрин ) Заранее спасибо. // // (---.Array_hpp---) // #ifndef Array_HPP // Preprocessor gates
C++ Создание окон http://www.cyberforum.ru/cpp-beginners/thread632939.html
Пожалуйста подскажите, как создавать и работать с окнами.
C++ Подскажите где ошибка, или может есть другой вариант реализации кода // Упорядочить статический массив(заполненый случайными числами), чтобы в нём чередовались чётные и нечётные элементы, разницу записываем в конец массива. // Функции не использовать. const int n=10; int ar,ch,c2=0,c=0,nch,k=0,p=0; for(int i=0;i<n;i++){ ar=rand()%11; cout<<ar<<"\t"; } cout<<endl; подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
05.08.2012, 00:28     Шифрация битов
Кстати, на меня внезапно снизошло озарение, что циклы не нужны. Пожалуй, быстрее некуда.
C
1
2
3
4
5
6
7
#define EVEN_BITS_MASK 0xAAAAAAAAU
#define ODD_BITS_MASK  0x55555555U
 
unsigned scramble(unsigned value)
{
  return ((value & EVEN_BIT_MASK) >> 1) | ((value & ODD_BITS_MASK) << 1);
}
Добавлено через 47 минут

Не по теме:

Я не мог упустить эту возможность. Теперь на 146% переносимее:

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
#include <iostream>
#include <string>
 
template<unsigned accum = 0U, unsigned iter = 1U, size_t bit_count_iter = 0>
struct UINT_BIT_MASK {
  static const unsigned odd = UINT_BIT_MASK<accum | iter, iter << 2>::odd;
  static const unsigned even = UINT_BIT_MASK<accum, iter>::odd << 1;
  static const size_t bit_count = UINT_BIT_MASK<accum, iter << 1, bit_count_iter + 1>::bit_count;
};
 
template<unsigned accum, size_t bit_count_iter>
struct UINT_BIT_MASK<accum, 0U, bit_count_iter> {
  static const unsigned odd = accum;
  static const unsigned even = accum << 1;
  static const size_t bit_count = bit_count_iter;
};
 
typedef UINT_BIT_MASK<> uint_bit_mask;
 
unsigned scramble(unsigned value)
{
  return ((value & uint_bit_mask::even) >> 1) | ((value & uint_bit_mask::odd) << 1);
}
 
std::string asBits(unsigned value)
{
  std::string str;
  str.resize(uint_bit_mask::bit_count);
  for (int i = uint_bit_mask::bit_count - 1; i >= 0; --i) {
    str[i] = (value & 1) ? '1' : '0';
    value >>= 1;
  }
  return str;
}
 
int main()
{
  unsigned test = uint_bit_mask::even;
  std::cout << asBits(test) << std::endl;
  std::cout << asBits(scramble(test)) << std::endl;
  return 0;
}
 
Текущее время: 07:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru