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

Представление числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написание генератора случайных чисел http://www.cyberforum.ru/cpp-beginners/thread165603.html
Здравствуйте! Помогите пожалуйста выполнить лабу. Суть состоит в том, чтобы написать генератор случайных чисел по равномерному, а также экспоненциальному, нормальному законам и закону Пуассона....
C++ В main работает в func нет Подскажите, пожалуйста, уважаемые форумчане. Код функции create(), будучи вставленным в main, работает безошибочно, но стоит ему оказаться на своем месте (в месте функции), так после ввода первого... http://www.cyberforum.ru/cpp-beginners/thread165570.html
Проверить выполняется ли неравенства C++
Даны действительные числа a,b,c. Проверить выполняется ли неравенства a<b b<c
Взаимно простые числа C++
Задание таково:составить программу, отвечающую на вопрос, являются ли два произвольных натуральных числа взаимно простыми. З.Ы. Я что то пытался сделать,но просто операторов незнаю,составил...
C++ Из Pascal в С++ http://www.cyberforum.ru/cpp-beginners/thread165540.html
Добрый день! Еще не совсем освоил новую среду, поэтому есть проблемы. Написал программу на паскале. Ее надо перевести в с++. Кто сможет помочь, заранее благодарен! Условие задачи: В массиве С1,...
C++ Вычислить выражение Вычислить выражение при помощи 3-х видов циклов (for , while , do while ) и выбор (по какому нужно считать ) при помощи switch вывести на экран значения функции Y(x) для х изменяющихся от... подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.09.2010, 19:57
Цитата Сообщение от Faltek Посмотреть сообщение
А как тогда в этом случае, получить из этого массива десятичное число?
Я же говорю компилятору побоку в каком виде число. Чтобы работать с 128-битным числом мы создаем массив 32-х битных чисел. Чтобы посмотреть на это число, мы можем либо преобразовать его в строку, либо просто вывести на экран. В общем как я понял вам надо что-то подобное:
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
#include <string.h>
#include <stdio.h>
 
typedef unsigned int word32;    // 32 бита
typedef word32 word128[4];      // 4 слова по 32 бита
 
#define BITSONWORD32    32
#define BITSONWORD128   128
 
#define SIZEWORD128     4
 
void shift_right(word128 n, int s) {
    int i;
    word32 t = 0;
    word32 c = 0;
    
    // в этом месте осуществляется сдвиг по одному слову
    // то есть по 32 бита
    if(s/BITSONWORD32) {
        for(i = SIZEWORD128 - 1; i >= s/BITSONWORD32; --i)
            n[i] = n[i - s/BITSONWORD32];
        
        for(i = 0; i < s/BITSONWORD32; ++i)
            n[i] = 0;
    }
    
    // здесь производится сдвиг оставшейся части битов
    if((s %= BITSONWORD32)) {
        for(i = 0; i < SIZEWORD128; ++i) {
            t = n[i];
            n[i] = (t >> s) | c;
            c = (t << (BITSONWORD32 - s));
        }
    }
}
 
// битовый AND с сохранением результата в 'a'
void and(word128 a, word128 b) {
    int i;
    for(i = 0; i < SIZEWORD128; ++i)
        a[i] &= b[i];
}
 
int main()
{
    int i;
    word128 x = { 0xAAAAAAAA, 0x12345678, 0x12345678, 0 }; // исходное число
    word128 y = { 0, 0, 0xFFFFFFFF, 0xFFFFFFFF };          // маска
    
    shift_right(x, 32); // сдвиг числа на 32 бита вправо
    and(x, y);          // наложение маски
    
    // вывод результата
    // в итоге в числе x - лежат средние 64 бита
    // то есть число 0x1234567812345678 (а старшие 64 бита все нулевые)
    for(i = 0; i < 4; ++i)
        printf("%0.8x ", x[i]);
    printf("\n"); 
}
Это не полностью рабочий код (написал только что и от балды ничего не проверяя) и возможно совсем не то, что вам надо.
Если оно, то реализовывайте по аналогии битовый сдвиг влево и все недостающие битовые операции. Только сделайте их полностью рабочими. Почему-то мне кажется, что если в такую функцию сдвига послать значение больше 128, то она рухнет
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru