Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2014, 06:47   #1
ochirova1960
Новичок
Джуниор
 
Регистрация: 30.11.2014
Сообщений: 1
По умолчанию задача Биты

помогите, пожалуйста,нужно решение
Дано натуральное число N. Необходимо найти младший и старший биты двоичной записи числа N, установленные в единицу, и вывести их в десятичной системе счисления.
ochirova1960 вне форума Ответить с цитированием
Старый 01.12.2014, 07:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var N:integer;
begin
 N:=123; Тут пропишешь ввод числа
 write((N and 255) and 1);
 readln;
end.
Если ничего не спутал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2014, 09:52   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не, не согласен, ведь нужно найти самую младшую единицу и самую старшую единицу.

Код:
var N : integer;
   k, m : integer;
begin
 N:=120; { Тут пропишешь ввод числа }
 WriteLn('----------------');
 if N>0 then begin
   k := 0;
   while (((N shr k) and 1)<>1) do inc(k);
   WriteLn('младшая единица в ',k,'-м разряде ');
   m := k;
   while ((N shr (m+1))<>0) do inc(m);
   WriteLn('старшая единица в ',m,'-м разряде ');
 end
 else WriteLn('Вы ввели не натуральное число!');
 readln;
end.
p.s. нумерация разрядов справа налево, начиная от нуля.

p.p.s. что такое "вывести их в десятичной системе счисления" не совсем понял. Объясните, что это, помогу доработать код, что выводил в нужном виде.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2014, 10:08   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Предложу несколько иное решение:

Код:
var N : integer;
   k : integer;
begin
 N:=146; { 10010010 }
 WriteLn('----------------');
 if N>0 then begin
   k := 0;
   while N and 1 <> 1 do begin
     N := N shr 1;
     inc(k);
   end;
   WriteLn('младшая единица в ',k,'-м разряде ');
   while N > 0 do begin
     N := N shr 1;
     inc(k);
   end;
   WriteLn('старшая единица в ',k,'-м разряде ');
 end
 else WriteLn('Вы ввели не натуральное число!');
 readln;
end.
Arigato вне форума Ответить с цитированием
Старый 01.12.2014, 11:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не, не согласен
Ты имеешь ввиду что нужно найти не самую старшую по разряду а ту, после которой идут только нули?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2014, 11:47   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что делает (N and 255) and 1 ? Просто проверяет 0-й бит. Достаточно и N and 1

ADD

Без цикла номер младшего не нулевого бита для 4-байтного
Код:
    n:=146;
    k:=0;
    if n and $FFFF = 0 then begin Inc(k,16); n:=n shr 16; end;
    if n and $FF   = 0 then begin Inc(k,8);  n:=n shr 8;  end;
    if n and $F    = 0 then begin Inc(k,4);  n:=n shr 4;  end;
    if n and $3    = 0 then begin Inc(k,2);  n:=n shr 2;  end;
    if n and $1    = 0 then       Inc(k,1);
А так можно подавить нулями все кроме младшего не нулевого
Код:
n:=n and (-n);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.12.2014 в 12:26.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Биты в LPT порту Fransuz_F Общие вопросы Delphi 12 26.02.2014 13:44
Биты в ASM51 Dartchuwak Помощь студентам 3 10.05.2011 14:01
Биты Leshiy1 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 20.03.2011 16:21
Байты и биты Karp_13 Общие вопросы Delphi 9 10.11.2009 00:33
Сбросить 3,5,7 биты veter_s_morya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 20.05.2008 09:43