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

Задача на побитовые операции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как это запустить в wxDev-C++... http://www.cyberforum.ru/cpp-beginners/thread335625.html
Здравстуйте, простите за идиотские вопросы, но с работой в консоли под эти компилятором вроде разобрался, а программа Hello Wold на gui(трырил код откуда-то из интернетов, на линуксе заработал, но у меня стоит чертов windows)таки не запускается... подскажите пожалуйста, какой проэкт создавать, какие include файлы здесь должны быть и что делать чтоб она запустилась наконец... заренее...
C++ Захват функции ? Полиморфизм Полиморфизмом в программировании называется переопределение наследником функций-членов базового класса, например: class Figure { ... void Draw() const; ... }; http://www.cyberforum.ru/cpp-beginners/thread335613.html
C++ Скопировать двумерный массив
Как скопировать массив меньшей размерности в массив большей размерности? Например скопировать q в массив q1. И у массива q и у массива q1 типы int.
C++ Представление графа в виде списка вершин.
Стыдно спрашивать, просто хочется сделать чтобы все работало правильно и быстро. Дело в том, что раньше я всегда хранил граф в виде списка ребер, если знаете(head, next, to). А теперь хочу сделать, чтобы было все четко со списком вершин(если это так называется), но не уверен в себе. В общем, есть такое представление: vetor<vector<int>> graph; Собственно, я хочу узнать, как...
C++ Поиск с барьером или без него http://www.cyberforum.ru/cpp-beginners/thread335589.html
Линейный поиск в числовом массиве с барьером и без барьера по числовому ключу. Как здесь понимать с барьером или без него? Что он представляет?
C++ Считывание из бинарника FILE* fl=fopen((ExtractFilePath(ParamStr(0))+r_buf+".bin").c_str(), "w"); char* l=r_buf.c_str(); WORD l1=strlen(l); fwrite(&l1,2,1,fl); for (int i=0; i<strlen(l); i++) fwrite(&l,1,1,fl); fclose(fl); подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4247 / 2779 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
24.07.2011, 11:45     Задача на побитовые операции
Цитата Сообщение от kravam Посмотреть сообщение
Сдвигание на p ничё не даст. Наверное, надо сдвигать на 32- n- p?
Возможно ты мой алгоритм не понял, но код у меня все равно ошибочный (когда писал у меня уже пол второго ночи было, почти спал))
Но не ошибается тот, кто ничего не делает
Код исправил, так же написал вот такую штуковину:
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
#include <iostream>
#include <cmath>
using namespace std;
 
void PrintNum(int num){
    std::cout<<num<<"\n";
    for(int i=31; i>=0; --i){
        std::cout<<((num>>i)&1);
        if(i%4==0) std::cout<<' ';
    }
    std::cout<<"\n\n\n";
}
 //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
int SetBits(int a, int pos, int n, int b){
    std::cout<<"\na= ";
    PrintNum(a);
    std::cout<<"b= ";
    PrintNum(b);
    int tmp=0;
    for(int i=0; i<n; ++i){
        tmp=tmp|(1<<i);
    }
    b&=tmp;
    tmp=~(tmp<<pos);
    b=b<<pos;
    a=(a&tmp)|b;
    return a;
}
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
 int setbits(int x,int p,int n,int y){
    typedef long unsigned int luint;
    luint N=luint(pow(2.,n)-1);
    luint mask=(luint(N&y)<<p);
    return (x&(~(N<<p))|mask);
}
 /////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////
#include <bitset>
int setbit( int x, size_t pos, size_t num, int y )
{
  std::bitset<sizeof(int) * 8> bitsetX( x ), bitsetY( y );
  for( unsigned i=0;i<num;++i )
  {
     /*
     std::cout << bitsetX[pos+i] << ' ' 
               << bitsetY[sizeof(int) * 8 - num + i] 
               << std::endl;
     */          
     bitsetX[ pos+i ] = bitsetY[ sizeof(int) * 8 - num + i ]; 
  }   
  
  return bitsetX.to_ulong();
}
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
int Setbits(int x, int p, int n, int y)
{
     return (x & (((y | ~0 << n) << p) | (1 << p) - 1)) | ((y & (1 << n) - 1) << p);
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
int main(){
    unsigned int x,y,n,p;
    while(std::cout<<"Enter x y n p (x & y in hex): "&&
                                        std::cin>>std::hex>>x>>y>>std::dec>>n>>p){
                std::cout<<"By igorrr37: "<<std::hex<<SetBits(x,p,n,y)<<std::endl
        <<"By alex_x_x: "<<std::hex<<setbit(x,p,n,y)<<std::endl
        <<"By stdcout: "<<std::hex<<Setbits(x,p,n,y)<<std::endl
        <<"By Kastaneda: "<<std::hex<<setbits(x,p,n,y)<<std::endl<<std::endl;
          }
    return 0;
}
потестил c разными значениями (скрин не прилагаю, т.к. в один скрин влазиет 1 тест, нет смысла)
Так вот: свой код, как и говорил, исправил. Функция alex_x_x возвращает отличное от остальных значение в 90% случаев, и было пару раз когда ф-ция от stdcout вернула что-то не то (не помню при каких значениях).

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

Не по теме:

Вроде с функциями/авторами ничего не напутал, проверял...



Добавлено через 13 минут
Цитата Сообщение от Kastaneda Посмотреть сообщение
и было пару раз когда ф-ция от stdcout вернула что-то не то (не помню при каких значениях).
Блин, не могу это повторить, хоту убей - не помню, может что попутал...
 
Текущее время: 13:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru