![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
zloy_pes |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 53 Пол: Мужской Реальное имя: Веселовский Пётр Николаевич Репутация: ![]() ![]() ![]() |
Помогите пожалуйста с такой задачей на Си: Вводится символ - нужно закодировать его, инвертировав значения бит на четных позициях (01110010 -> 11011000). Нужно использовать битовые поля.
-------------------- Money, hoes, cars and clothes
That's how all my niggaz know Blowin dro, 24's That's how all my niggaz roll... |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Извращение страшное, но работает (битовые поля тоже присутствуют)...
Тестировалось на Turbo C, возможно на других компиляторах не пойдет (я не знаю, насколько переносима "склейка" - она же ##) #include <conio.h>
#include <stdio.h>
#define bit_number(x) _##x
#define invert(x) (Cvt.bits.bit_number(x))=(!(Cvt.bits.bit_number(x)));
typedef struct _BitField {
unsigned int _0:1;
unsigned int _1:1;
unsigned int _2:1;
unsigned int _3:1;
unsigned int _4:1;
unsigned int _5:1;
unsigned int _6:1;
unsigned int _7:1;
} BitField;
typedef union _Convert {
BitField bits;
char ch;
} Convert;
int main() {
char s[10];
Convert Cvt;
Cvt.ch = getch();
printf("init value = %c(%d)\n", Cvt.ch, Cvt.ch);
/* Cvt.ch = (char)114; */
invert(1);
invert(3);
invert(5);
invert(7);
printf("encoded value = %c(%d)\n", Cvt.ch, (((int)Cvt.ch) & 0xFF));
return 0;
}
|
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 12:45 |