0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 2
1

Битовые операции: работа с целым числом (long) как с "массивом" из четырех однобайтовых чисел (char)

20.11.2019, 22:57. Показов 860. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задали задачу, не понимаю, что хотят от меня в условии:/
Вот само условие:
Напишите функцию, позволяющую работать с целым числом (long) как с "массивом" из четырех однобайтовых чисел (char)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2019, 22:57
Ответы с готовыми решениями:

Битовые операции с Long double
Надо вывести в консоли внутреннее представление в двоичной системе счисления числа типа long...

Битовые операции с массивом байт
Доброго времени суток. Есть задача обрабатывать массивы байт, полученные от различного...

Битовые и логические операции с массивом
Дан массив из 9 знаковых байтов.Биты отрицательных чисел сдвинуть арифметически вправо на 2...

Битовые и логические операции с массивом
Само задание : Дан массив из 10 без знаковых байтов. Коды первого третьего и седьмого байта...

Битовые операции над числом
Задали программу, которая позволит ввести два целых числа с клавиатуры, найдет и выведет на дисплей...

4
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,858
21.11.2019, 11:40 2
C
1
2
3
4
union{
  uint32_t ival;
  uint8_t cval[4];
};
АХТУНГ! Писал сразу на форуме, компилировал биокомпилятором
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.11.2019, 13:15 3
А можно и так
C++
1
2
3
4
uint32_t ival;
unsigned char *cval = (unsigned char *) (&ival);
  // или
uint8_t *cval = (uint8_t *) (&ival);
0
594 / 286 / 178
Регистрация: 06.06.2016
Сообщений: 547
21.11.2019, 23:43 4
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
 #include <iostream>
 
 typedef  unsigned char  byte;  // 1 байт
 typedef  unsigned long  ul;    // 4 байта????
 
 struct _4bytes
 {
    byte b1;
    byte b2;
    byte b3;
    byte b4;
 };
 
 // разобрать число n на байты
 _4bytes unzip( ul n )
 {
    byte b1 = (byte) (  n         & 0xFF );
    byte b2 = (byte) ( (n >> 8  ) & 0xFF );
    byte b3 = (byte) ( (n >> 16 ) & 0xFF );
    byte b4 = (byte) ( (n >> 24 ) & 0xFF );
    return { b1, b2, b3, b4 };
 }
 
 // cобрать из байтов число
  ul zip( _4bytes n )
  {
     return  ( n.b4 << 24 ) + ( n.b3 << 16 )
             + ( n.b2 << 8 ) + n.b1;
  }
 
 //----------------------------------------------------
 int main()
 {
    ul n = 100500;
    std::cout << zip( unzip( n ) ) << "\n"; // проверка
    // работаем:
    _4bytes B = unzip( n ); // разбили на байты
    std::cout << (int)B.b1 << " " << (int) B.b2 << " "
              << (int)B.b3 << " " << (int) B.b4 << "\n";
    // что-то делаем с байтами B.b1, B.b2, B.b3, B.b4 ...
    std::cout << zip( B ); // собрали их в число
    return 0;
 }
Замечание: Стандарт C++ не определяет размер целочисленных типов в байтах, а только минимальные диапазоны, которые они должны поддерживать. Тип unsigned long имеет длину не менее 32 бит.
Проверьте на своём компиляторе, должно быть sizeof( ul ) == 4.
1
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,858
22.11.2019, 10:41 5
Цитата Сообщение от regio1961 Посмотреть сообщение
Замечание: Стандарт C++ не определяет размер целочисленных типов в байтах
... поэтому что Байт, что я использовали типы фиксированной разрядности: uint32_t, uint8_t. Они именно для этого и придуманы.
0
22.11.2019, 10:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2019, 10:41
Помогаю со студенческими работами здесь

Битовые операции с 4-х байтовым числом
Добрый день. Есть задача &quot;Вводится 4-х байтовое число. Осуществить циклический сдвиг в 3 байте на 2...

Битовые операции для char
День добрый. Можно ли произвести побитовый сдвиг влево (и другие битовые операции) над буквой или...

Арифметический операции с двумерным массивом long int
Вообщем ситуация такая: 1) Есть массив double K; Он заполнен некоторыми ненулевыми числами...

Дата задана целым числом формате «ччммгггг», используя операции / и % увеличить на 1 месяц и год
В программе все исходные данные и результаты – целые числа. Для ввода - вывода данных использовать...

Сравнить каждое число масива однобайтовых чисел с неким заданым числом
Есть задание с которым я не могу справится, на КР580 нужно написать программу: За адресом 8100...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru