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

Нифига не понял, почему всё работает - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ нарисовать точки в dev http://www.cyberforum.ru/cpp-beginners/thread747610.html
доброго времени суток. уже не первый дель ломаю голову как нарисовать точки по координатам прочитанными из файла. координаты генерируются случайно (это пройденный этап).
C++ Поменять строки матрицы местами используя указатели Вот код для смены строк. // Smena_strok.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <clocale> int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL,"rus"); http://www.cyberforum.ru/cpp-beginners/thread747603.html
C++ Как работает программа (прокомментировать)
Друзья, прокомментируйте прогу, это алгоритм планирования Round Robin #include "stdafx.h" #include "conio.h" #include "stdlib.h" #include "locale.h" #include "iostream" using namespace std; int globaltime = 0; int n;
Подскажите, пожалуйста, как ввести массив из текстового файла. C++
Здравствуйте. подскажите пожалуйста как ввести массив из текстового файла. Я написал программу но она в каждый элемент массива вставляет только 1 символ. Как сделать так чтобы каждый элемент массива содержал больше символов? #include <fstream> #include <windows.h> #include <iostream> using namespace std; int main(void) {int n; const int len=81; char *a; char delims=" ";
C++ Дана действительная матрица порядка n. Найти сумму элементов, расположенных в закрашенной части матрицы на рисунке. http://www.cyberforum.ru/cpp-beginners/thread747582.html
Дана действительная матрица порядка n. Найти сумму элементов, расположенных в закрашенной части матрицы на рисунке.
C++ Элементы матриц. Найти столбец с минимальным произведением элементов Задана целочисленная матрица порядка NxN. Среди столбцов заданной матрицы, содержащих только такие элементы, которые по модулю не больше заданного натурального n, найти столбец с минимальным произведением элементов. Найти сумму элементов тех строк, в которых находится наибольший элемент матрицы. подробнее

Показать сообщение отдельно
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.12.2012, 15:35     Нифига не понял, почему всё работает
Примерно так, наверное:
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
#include <iostream>
#include <cstdint> 
#include <climits>
 
 
struct TInteger {
  
  static std::size_t const bufferSize = 8;
  std::uint8_t Data[bufferSize];
};
 
std::ostream & print_bits(std::ostream & ostream, TInteger const& integer) {
   static char const delimeter = ' ';
   static char const trailing = '\n';
   static std::uint8_t mask = static_cast<std::uint8_t>(1 << (CHAR_BIT - 1));
   
   for (std::size_t i = 0; i != TInteger::bufferSize; ++i) {
      std::uint8_t value = integer.Data[i];
      for (std::size_t j = 0; j != CHAR_BIT; ++j) {
         ostream << ((value & mask) ? '1' : '0');
         value = static_cast<std::uint8_t>(value << 1);
      }
      ostream << delimeter;
   }
   ostream << trailing;
   
   return ostream;
}
 
TInteger operator <<(TInteger const& integer, std::size_t const shift) {
   std::uint8_t const byteShift     = static_cast<std::uint8_t>(shift % CHAR_BIT);
   std::uint8_t const returnShift   = static_cast<std::uint8_t>(CHAR_BIT - byteShift);
   std::uint8_t const mask          = static_cast<std::uint8_t>((-1) << (CHAR_BIT - byteShift));
   TInteger result;
   
   std::size_t i = TInteger::bufferSize - 1 - (shift / CHAR_BIT);
   std::size_t j = TInteger::bufferSize - 1;
   result.Data[i] = static_cast<std::uint8_t>(integer.Data[j] << byteShift);
   for ( ; i != 0; --i, --j) {
      result.Data[i - 1] = static_cast<std::uint8_t>(
               (integer.Data[j - 1] << byteShift)
             | ((mask & integer.Data[j]) >> returnShift));
   }
   
   return result;
}
 
 
int main() {
   TInteger integer = {{1, 2, 3, 4, 128 + 32, 128 + 64, 64 + 16, 128 + 64 + 32}};
   std::cout << "        | "; print_bits(std::cout, integer);
   std::cout << " << 0   | "; print_bits(std::cout, (integer << 0));
   std::cout << " << 1   | "; print_bits(std::cout, (integer << 1));
   std::cout << " << 5   | "; print_bits(std::cout, (integer << 5));
   std::cout << " << 8   | "; print_bits(std::cout, (integer << 8));
   std::cout << " << 13  | "; print_bits(std::cout, (integer << 13));
   std::cout << " << 16  | "; print_bits(std::cout, (integer << 16));
   std::cout << " << 19  | "; print_bits(std::cout, (integer << 19));
   std::cout << " << 25  | "; print_bits(std::cout, (integer << 25));
   std::cout << " << 55  | "; print_bits(std::cout, (integer << 55));
   std::cout << " << 58  | "; print_bits(std::cout, (integer << 58));
   std::cout << " << 59  | "; print_bits(std::cout, (integer << 59));
   std::cout << " << 63  | "; print_bits(std::cout, (integer << 63));
}
http://liveworkspace.org/code/UJlSJ$2

Добавлено через 2 минуты

Не по теме:

Почему ты хранишь массив из uint8_t, а не unsigned int, например?

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