Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248

Определить позицию самой старшей единицы в битовом представлении данного целого числа

29.11.2022, 17:06. Показов 1700. Ответов 13

Студворк — интернет-сервис помощи студентам
Определить позицию самой старшей единицы в битовом представлении данного
целого числа
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2022, 17:06
Ответы с готовыми решениями:

Определить позицию самой старшей единицы в битовом представлении данного целого числа
Определить позицию самой старшей единицы в битовом представлении данного целого числа!!

Определить позицию старшей единицы
В однобайтном беззнаковом числе нужно определить позицию старшей единицы, подскажите, возможно ли сделать это без арифметических операций,...

Определить порядок старшей цифры числа (единицы, десятки, сотни т.д.)
Задано натуральное число, диапазон значений - слово. Определить порядок старшей цифры числа (единицы, десятки, сотни т.д.)

13
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
29.11.2022, 20:02
Лучший ответ Сообщение было отмечено DaraChernyshova как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
int pos1(int n)
{
    int k=0;
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
30.11.2022, 13:34  [ТС]
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
#include <stdio.h>
#include <stdlib.h>
 
int pos1(int *n)
{
    int k=0;
    while (1)
    {
          *n=*n>>1;
          if (n==0) return k;
          k++;
     }
}
   
   
 
 
int main(void)
{
    int *arr;
    int a=0;
    int j;
    int g;
    arr=(int*)malloc(8*sizeof(int));
    scanf("%d",&a);
   
    g=pos1(arr);
   
 
   
   
    for (j=0;j<8*(int)sizeof(int);j++){
//        printf("%d",arr[j]);
        printf("%d",g);
    }
 
    printf("\n");
    return 0;
   
}
Добавлено через 39 минут
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
#include <stdio.h>
#include <stdlib.h>
 
int pos1(int n)
{
    int k=0;
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
 
int main(){
  unsigned int x;
  char str[8*sizeof(x)+1];
  char *res;
  int *a;
 
  scanf("%i",&x); //вводим как signed int, но храним в unsigned
  res = str+sizeof(str); //заполнение строки идет с конца (с младшего бита)
  *res = 0; //конец строки
  do{
    res--; //переход к следующему символу в строке
    if( x & 1 )*res = '1'; else *res = '0'; //проверка бита
    x>>=1; //переход к следующему биту
  }while(x != 0); //если число кончилось - ведущие нули игнорируем
  printf("%s\n",res);
  printf("%d",pos1(*res));
  
}
Теперь работает

Добавлено через 25 минут
накосячила

осталось строку преобразовать в инт

Добавлено через 37 минут
Всё поняла!!! Спасибо

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
#include <stdio.h>
#include <stdlib.h>
 
int pos1(int n)
{
    int k=0;
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
   
   
 
 
int main(void)
{
    int a=1,g;
    scanf("%d",&a);
   
    g=pos1(a);
    printf("%d",g);
 
    printf("\n");
    return 0;
   
}
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
01.12.2022, 13:55  [ТС]
Catstail, а как нужно изменить такой код

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
#include <stdio.h>
#include <stdlib.h>
 
int pos1(int);
 
int pos1(int n)
{
    int k=0;
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
   
   
 
 
int main(void)
{
   
  int x;
  char str[8*sizeof(x)+1];
  char *res;
  int a;
  int g;
//  int a=1;
  printf ("Vvedite chislo\n");
  scanf("%i",&x);
  a=x;
  res = str+sizeof(str); //заполнение строки идет с конца (с младшего бита)
  *res = 0; //конец строки
  do{
    res--; //переход к следующему символу в строке
    if( x & 1 )*res = '1'; else *res = '0'; //проверка бита
    x>>=1; //переход к следующему биту
  }while(x != 0); //если число вдруг кончилось
  printf("%s\n",res);
   
   
   
//    scanf("%d",&a);
   
    g=pos1(a);
    printf("%d",g);
 
    printf("\n");
    return 0;
   
}

Чтобы он работал при выводе -1??

Добавлено через 1 минуту
Catstail, когда делаю икс unsigned

Не могу сделать вывод
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
01.12.2022, 14:06
Вот так:

C
1
2
3
4
5
6
7
8
9
10
11
int pos1(int n)
{
    int k=0;
    if (n<0) return 31; 
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
01.12.2022, 14:37  [ТС]
Catstail, а для всех целых ������������

Добавлено через 14 секунд
А для всех целых чтобы

Добавлено через 40 секунд
Все поняла

Сейчас исправлю

Добавлено через 7 минут
Catstail, почему для 123 6 выдает???
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
01.12.2022, 16:14
Потому, что 12610=11101002 Номера битов идут справа налево и нумерация с нуля
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
07.12.2022, 15:49  [ТС]
Catstail, Спасибо Вам Большое!!
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
#include <stdio.h>
#include <stdlib.h>
 
int pos1(int n)
{
    int k=0;
    
    if (n<0){
        n=n*(-1);
        while (0)
    {
          n=n>>1;
          if (n==1) return k;
          k++;
     }
    }
    
    
    while (1)
    {
          n=n>>1;
          if (n==0) return k;
          k++;
     }
}
   
   
 
 
int main(void)
{
    int a=1,g;
    scanf("%d",&a);
   
    g=pos1(a);
    printf("%d",g);
 
    printf("\n");
    return 0;
   
}
Для числа 12333

11000000101101 выдаёт 13

и для -12333 Тоже... хотя должно быть 16

Добавлено через 7 секунд
Думаю

Добавлено через 2 минуты
всмысле 15

Добавлено через 2 часа 3 минуты
Catstail, не получается для отрицательных целых
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
07.12.2022, 15:55
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
не получается для отрицательных целых
- для отрицательных целых не о чем думать! Самая старшая единица всегда будет иметь номер 31.
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
07.12.2022, 15:56  [ТС]
Catstail, ой ой ой

Спасибо большое!!
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
07.12.2022, 16:11
Вот, смотри:

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
#include <stdio.h>
 
// Печать двоичного кода числа
 
void binPrint(int n, int p, int i)
{
    if (i==31) return;
    binPrint(n,p<<1,i+1);
    printf("%d",(n & p)==0?0:1);
}
 
int main()
{
    int n=-123;
 
    printf("n=%d %x\n",n,n);
    binPrint(n,1,0);
    printf("\n");
    
    n=123;
    
    printf("n=%d %x\n",n,n);
    binPrint(n,1,0);
    printf("\n");
 
    return 0;
}
Вывод:

n=-123 ffffff85
1111111111111111111111110000101 - отрицательное число. Какой номер позиции самой старшей единицы???
n=123 7b
0000000000000000000000001111011
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
09.12.2022, 00:36
Catstail,
для 0 вернет мусор.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
09.12.2022, 04:09
Цитата Сообщение от bormant Посмотреть сообщение
для 0 вернет мусор.
- а что она должна вернуть в этом случае?
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
09.12.2022, 04:29
Catstail,
какое-то число, что нельзя перепутать с допустимым результатом. Ведь мусор запросто может оказаться в диапазоне 0..31.
Впрочем, согласен, подход не подавать на вход неподходящих параметров тоже вполне имеет право на жизнь, особенно если явно обозначен assert-ом и комментарием...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2022, 04:29
Помогаю со студенческими работами здесь

Найти позицию старшей единицы (какой по счету она находится) в регистре AH
Пожалуйста, помогите. Нужно найти позицию старшей единицы (какой по счету она находится) в регистре AH. Если все нули результат 8. Написал...

В битовом представлении числа, например 1011100 элементу у которого соседи равны присвоить их значение
Всем привет. Нужна помощь! Не знаю как написать код. В битовом представлении числа ,например 1011100 элементу у которого соседи равны...

Определить положение старшей единицы в длинном целом числе N
Задание: Определить положение старшей единицы в длинном целом числе N.

Преобразовать число в обратный код, определить и запомнить положение второй старшей единицы
Здравствуйте. Мне необходимо написать программу, которая позволяет преобразовать число в обратный код, определить и запомнить положение...

Определить, все ли цифры данного целого числа одинаковы
Определить, все ли цифры данного целого числа одинаковы Решить нужно в Delphi


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru