| 
| 
 | Вопрос # 6 062/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты!Очень нужна ваша помощь.
 Объясните как работает условие
 
 if (Value and (1 shl i)) > 0в следующем коде: 
 
 function IntToBin(Value: integer; Digits: integer): string;
var
  i: integer;
begin
  result := '';
  for i := 0 to Digits - 1 do
    if (Value and (1 shl i)) > 0 then
      result := '1' + result
    else
      result := '0' + result;
end;Проблема в том, что мне нужно как-то исправить этот код, чтобы он при
 IntToBin(72, 64);выводил 
 0000000000000000000000000000000000000000000000000000000001001000а не так как он сейчас работает и выводит 
 0000000000000000000000000100100000000000000000000000000001001000 Для начала хочу разобраться в условии.
 А если вы еще поможете правильно исправить код, или хотя бы подсказать в чем проблема, буду очень признателен.
 
 код взят отсюда: http://www.delphisources.ru/pages/faq/base/number_to_binary.html
 Приложение:Переключить в обычный режим function IntToBin(Value: integer; Digits: integer): string;var  i: integer;begin  result := '';  for i := 0 to Digits - 1 do    if (Value and (1 shl i)) > 0 then      result := '1' + result    else      result := '0' + result;end;
|  |   Вопрос задал: disillusion (статус: Посетитель)Вопрос отправлен: 9 апреля 2012, 16:53
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Ахтунг! Писал на коленке, не отлаживал (нет времени, рабочий день кончается).
 function IntToBin(Value: Int64; Digits: Integer): string;
var
  Index: Integer;
begin
  SetLength(Result, Digits);
  FillChar(Result[1], Digits, '0');
  Index:= Digits;
 
  while (Value <> 0) and (Index > 0) do
    begin
      Result[Index]:= Char($30 + (Value and 1));
      Dec(Index);
      Value:= Value shr 1;
    end;
end;
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 9 апреля 2012, 17:09
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо за шедевр!Во всем разобрался.
 То что нужно!
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 9 апреля 2012, 20:42; участников в обсуждении: 2. 
|   | disillusion (статус: Посетитель), 9 апреля 2012, 17:18 [#1]:что значит 
 (Value and 1)в строке 
 Result[Index]:= Char($30 + (Value and 1));? |  
|   | disillusion (статус: Посетитель), 9 апреля 2012, 18:17 [#2]:все. со всем разобрался. спасибо за помощь!
 |  9 апреля 2012, 18:20: Статус вопроса изменён на решённый (изменил автор вопроса — disillusion) 
|   | min@y™ (статус: Доктор наук), 9 апреля 2012, 20:09 [#3]: Цитата (disillusion): что значит (Value and 1) Гашение всех остальных разрядов, кроме нулевого. Для того, чтобы узнать, чему равен очередной разряд (0 или 1) после сдвига вправо.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | disillusion (статус: Посетитель), 9 апреля 2012, 20:16 [#4]:Ага. Я уже сам с этим разобрался. Мне очень понравился ваш код.
 Поучительно для меня.
 Спасибо =)
 |  
|   | min@y™ (статус: Доктор наук), 9 апреля 2012, 20:42 [#5]: Цитата (disillusion): Мне очень понравился ваш код. Это почему?
 Думаю, что можно этот код даже оптимизировать. Просто у меня было 5 минут всего, чтобы что-то написать. Ровно в 17:15 отрубают питание (220В), пора было вырубать комп. Что пришло на мозг, то и набросал.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |