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

Битовые операции - перемещение бит для unsigned int - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Очередь печати и GetPrinter() http://www.cyberforum.ru/cpp-beginners/thread456077.html
Товарищи! Может кто доходчиво объяснить как правильно использовать функцию GetPrinter(), или каким образом можно получать информацию о состоянии принтера из очереди печати? Заранее спасибо. Добавлено через 18 часов 35 минут что, совсем никто не знает, как работать с WinAPI?
C++ Решение уравнения ("при попытке сопоставить список аргументов") Добрый день ! Делаю первые шаги в изучении С++, пока пишу самые простейшие программы, вывод текста, решение простых формул. Написал программу для решения несложной формулы, и столкнулся с небольшой проблемой.#include "stdafx.h" #include<iostream> #include<cmath> using namespace std; int _tmain(int argc, _TCHAR* argv { double A,V; const double g=(9,8); http://www.cyberforum.ru/cpp-beginners/thread456065.html
C++ Класс стек строк
Необходимо написать 2 класса: класс "строка" и класс "стек строк". StringStack arr; arr.push("abcdef"); String str;// (класс строк необходимо написать самому) arr.push(str); str = arr.pop(); Стек заполняется следующим образом: arr = "01010"; // равносильно s.push("01010");
Поиск средства мониторинга и трассировки. C++
Добрый день! Возникла следующая проблема - есть программа, которая располагается на сервере, но запускается на клиентской машине. При запуске программы она записывает настройки пользователя в некоторое место на клиентской машине. При некоторых сочетаниях настроек программа перестает работать и даже не запускается. Сбросить настройки программа не позволяет. Необходимо узнать в каком месте эта...
C++ ввод и вывод бинарного дерева в файл http://www.cyberforum.ru/cpp-beginners/thread456032.html
Помогите пожалуйста с написание проги) вроде не сложно) Задание такое: Определить две функции: void WriteTree(char * fname, Node * node); – функция записи дерева в файл. Node * ReadTree(char * fname); – функция чтения дерева из файла. Node * ReadTree(char * fname); – функция создает из файла с именем fname бинарное дерево. Функция возвращает указатель на корневой узел. Для чтения...
C++ Ошибка в программе для вывода меню Нужно сделать раскрывающееся меню, но у меня даже обычное не получается.и так и сяк его кручу...вот код, может кто поможет исправить ошибки. там в конечном пункте надо было еще сделать подтверждение выхода...#include "StdAfx.h" #include <iostream> #include <conio.h> #include <windows.h> using namespace std; int main() { char str1 = "Rabota s failami"; char str2 = "Prosmotr"; подробнее

Показать сообщение отдельно
ibmpc
 Аватар для ibmpc
78 / 76 / 2
Регистрация: 29.12.2011
Сообщений: 183
02.03.2012, 10:35     Битовые операции - перемещение бит для unsigned int
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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdint.h>
/*
 * задание:
Создайте функцию, которая перемещает биты для unsigned int на 30 бит в право, причем
выходящие при сдвиге за правую границу переменной биты должны "вталкиваться" в переменную с левой
стороны.
 */
// извлекает бит числа Нумерация с ПРАВА с 1
int get_flag(uint64_t x, int i)
{
    assert(i > 0);
    assert(i <= sizeof(x)*8);
    // усечение + & 1
    return x >> (i-1) & 1;
}
 
//Extracting bit-fields
uint32_t extract_bit_fields(uint32_t x, int count)
{
// вынимает count битов С ПРАВОЙ СТОРОНЫ
    return (x & ((2<<count-1)-1));
}
 
uint32_t replace_bit_fields(uint32_t x, uint32_t y, int count)
{
   // сбросить в 0 биты, которые будут устанавливаться
   // | с новым значением
    return ( (x & ((2<<(sizeof(x)*8-count)-1)-1)) | y);
}
 
void view(uint32_t x)
{
    for(register int i=sizeof(uint32_t)*8;i>0;i--)
    {
        printf("%i",get_flag(x,i));
        if (ferror(stdout)) perror(" Error stdout ");
    }
    assert(putchar('\n')!=EOF);
}
 
int main(int argc, char** argv)
{
    // число
    uint32_t a = 1;
    printf("Num\n");
    view(a);
    // вынуть 30 bit с ПРАВА и сдвинуть для послкдуюшей установки с лева
    uint32_t t = extract_bit_fields(a,30) << 32-30;
    // заменить в сдвинутом числе биты битами из t
    t = replace_bit_fields(a>>30,t, 30);
    printf("Num >> 30\n");
    view(t);
 
    return (EXIT_SUCCESS);
}
 
Текущее время: 19:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru