В массиве определить количество чисел с установленными старшими младшими разрядами - C (СИ)
Формулировка задачи:
здравствуйте!
вот задача: в массиве целых 32х разрядных чисел определить кол-во чисел с установленными старшими младшими разрядами.
честно говоря, понимаю плохо, но что-то написать удалось, пожалуйста, помогите разобраться:
Спасибо
#include <stdio.h>
void main(void)
{int i, a[10], s=0;
const int mask=3;
for(i=0; i<10; i++)
{scanf("%d",&a[i]);}
for(i=0; i<10; i++)
{if((a[i] &mask)==mask) {s+=1;}}
//нужен ли пробел между a[i] и &mask ? и как обозначить, что меня интересуют только старшие или только младшие разряды?
for(i=0; i<10; i++)
{printf("%d",s);}}Решение задачи: «В массиве определить количество чисел с установленными старшими младшими разрядами»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#define ARRLEN 10
char *binStr(char *buf, int d){
char *p;
int i;
for ( p = buf, i = sizeof(int) * CHAR_BIT - 1; i >= 0; --i )
*p++ = ( d & ( 1 << i ) ) ? '1' : '0';
*p = '\0';
return buf;
}
int main(void){
int arr[ARRLEN];
size_t i;
char buf[33];
srand(time(NULL));
for ( i = 0; i < ARRLEN; ++i )
arr[i] = rand() % 100 - 50;
printf("\nAll values:\n");
for ( i = 0; i < ARRLEN; ++i )
printf("%4d\t0x%08x\n", arr[i], arr[i]);
printf("\nValues where first and last bit is set:\n");
for ( i = 0; i < ARRLEN; ++i )
if ((( arr[i] & 1 ) && (arr[i] & 1 << 1)) ||
((arr[i] & ( 1 << ( sizeof(int) * CHAR_BIT - 1 )) ) && (arr[i] & ( 1 << ( sizeof(int) * CHAR_BIT - 2 )))))
printf("%4d\t0x%08x\t%s\n", arr[i], arr[i], binStr(buf, arr[i]));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется длина массива (ARRLEN) и буфер для двоичного представления числа (buf)
- Функция binStr() преобразует целое число в двоичную строку
- В функции main() инициализируется массив arr[] случайными значениями
- Выводится список всех значений массива arr[]
- Проверяется каждое значение массива arr[] на условие: старший и младший биты установлены
- Если условие выполняется, то выводится значение числа и его двоичное представление
- Программа возвращает 0, завершая свою работу