Задача на побитовые операции (Си)

  • Автор темы Oleg306
  • Дата начала
O

Oleg306

Гость
#1
Всех форумчан с новым годом!

Помогите решить задачу в Си:
Перемножить элементы массива целых чисел, коды которых содержат в 6-м бите 0. Из результата выделить младший байт и определить символ, которому он соответствует(если он существует).

То, что я пытался написать :
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int funk(int a[])
{int i,temp=0,l=0,d;
unsigned long k=1;
clrscr();
for(i=0;i<10;i++)
{temp=a[i];
d=temp>>5;
k=k*temp;}
printf("%u\n",k);
l=(a[i]>>8);
return l;}
int main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};
int i=0,j;

i=funk(a);
printf("%c",i);


getch();
return 0;
}
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
Oleg306
Ты извращенец? Если нет напиши код понятным языком.
Хочу помочь, но на код смотреть противно.
 
O

Oleg306

Гость
#3
Прошу прощения, я только начинаю познавать программирование;
что значит "Понятным языком" и что не так в моем коде ?
 
S

StudyMen

Гость
#4
Email: administrator@studymen.ru
Skype: studymen
ICQ: 639151387

Обращайтесь, задача будет готова в течение 4 часов, с момента начала сотрудничества!
 
R

Rififi

Гость
#5
Oleg306

примерно как-то так...

C++:
#include <locale>
#include <stdio.h>
#include <ctype.h>

int main()
{
setlocale(LC_ALL, "");

int arr[] = {1,2,3,4,5,6,7,8,9,10};
const size_t N = sizeof(arr) / sizeof(arr[0]);

const size_t mask = 1 << 6;

for (size_t i=0; i<N; i++)
for (size_t j=i+1; j<N; j++)
{
if (!(arr[i] & mask) && !(arr[j] & mask))
{
const int mul = arr[i] * arr[j];
const bool isChar = isalpha(mul & ~1);

printf("%d - %s\n", mul, (isChar ? "char" : "not char"));
}
}

return 0;
}
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#6
Oleg306
Вот как то так он тебе помог перевести программу на "понятный язык". Я имел в виду элементарные пробелы (или табуляцию) и переносы строк. К тому же ты (или кто-то из модераторов) поправил тэг.