Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] обработка целых чисел


Автор: ALEXEY13 28.11.2007, 15:44
Уважаемые программисты, пожалуйста, помогите с задачей, а то я сам совсем ничего не понимаю!!!

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

За рание огромное вам спасибо!!! 
Код






M
Kuvaldis
Не забываем указывать язык программирования в названии темы!


Автор: JAPH 28.11.2007, 20:41
"За рание" - ужоснах
Если в числе нет единичных разрядов, выведем -1, иначе номер самого младшего единичного бита (биты нумеруются с нуля).
Код
    long res = -1;
    long i = 0x00000000;
/*  // Можно переложить работу на процессор :)
    __asm {
        mov eax, -1
        bsf eax, i
        mov res, eax
    } */
    if (i) {
        res = 0;
        while (!(i & 1)) { i >>= 1; res++; }
    }
    cout << res;

Автор: ALEXEY13 28.11.2007, 22:49
А можно с самого начала, а то я в этом совсем не разбираюсь?

Автор: likehood 28.11.2007, 23:57
Цитата(ALEXEY13 @  28.11.2007,  16:44 Найти цитируемый пост)
Определить положение младшей единицы в длинном целом числе N.

В десятичной записи числа или в двоичной?

Автор: ALEXEY13 29.11.2007, 00:06
В двоичной.

Автор: likehood 29.11.2007, 00:16
Код

    long res = -1; // номер разряда
    long i = 0x00010000; // обрабатываемое число
    if (i) { // если число не равно нулю
        res = 0;
        while ((i & 1) == 0)  // пока последний разряд числа i равен 0
        {
             i >>= 1; // сдвигаем число i на один разряд вправо
             res++;   // увеличиваем счетчик сдвигов
        }
    }
    cout << res;

Автор: ALEXEY13 29.11.2007, 11:11
Цитата
А можно с самого начала

В смысле вместе с include

Автор: orthrus 29.11.2007, 14:14
Код

#include <iostream>

using namespace std;

int main(){
    long res = -1; // номер разряда
    long i = 0x00010000; // обрабатываемое число
    if (i) { // если число не равно нулю
        res = 0;
        while ((i & 1) == 0)  // пока последний разряд числа i равен 0
        {
             i >>= 1; // сдвигаем число i на один разряд вправо
             res++;   // увеличиваем счетчик сдвигов
        }
    }
    cout << res;
    return 0;
}

Автор: ALEXEY13 29.11.2007, 18:01
А можно поподробнее?

Автор: orthrus 29.11.2007, 18:03
что именно поподробнее?

Автор: ALEXEY13 29.11.2007, 19:18
Что значит using namespace std;

Автор: likehood 29.11.2007, 19:32
Так пойдет?
Код

#include <stdio.h>
int main()
{
    long res = -1; // номер разряда
    long i = 0x00000000; // обрабатываемое число
    scanf("%ld", &i); // ввод числа с клавиатуры
    if (i) { // если число не равно нулю
        res = 0;
        while ((i & 1) == 0)  // пока последний разряд числа i равен 0
        {
             i >>= 1; // сдвигаем число i на один разряд вправо
             res++;   // увеличиваем счетчик сдвигов
        }
    }
    printf("%d\n", res);
    return 0;
}

Автор: ALEXEY13 29.11.2007, 23:45
Пойдет, спасибо!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)