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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 18:46   #51
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
Так пойдет?
Код:


var b: Byte;
p: ^Char;

begin
b:=48;
p:=@b;
writeln(p^);
readln;
end.
На сам деле это и есть приведение типов. От Char(...) отличается лишь большим количеством операций. Пруф:
1)
Код:
var
  i: integer;
  c: char;

begin
  readln(i);
  c := Char(i);
  writeln(c);
  readln;
end.


2)
Код:
var
  i: integer;
  c: ^char;

begin
  readln(i);
  c := @i;
  writeln(c^);
  readln;
end.

Из Debuger'а видно, что принцип тот же.

UPD: Если очень нужно использовать двоичное число, то можно так:
Код:
var
  i: integer;

begin
  asm
    mov i,101b
  end;
  writeln(i);
  readln;
end.
В итоге, это выглядит не так страшно:


P.S. Кроме # и $ есть ещё e. Ex.: writeln(2e8);

Последний раз редактировалось Kix.IV; 16.03.2013 в 19:16.
Kix.IV вне форума Ответить с цитированием
Старый 16.03.2013, 19:54   #52
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
На сам деле это и есть приведение типов.
Ссылка на генерируемый код в данном случае неправомерна.
У приведения типов нет и не может быть кода, т.к. это инструкции компилятору, притом, не той его части, что генерит код, а той, что осуществляет синтаксическую проверку.
А раз так, значит, вопрос лишь в том, как "обмануть" синтаксический анализатор компилятора.
Именно такой вариант и был предложен.
s-andriano вне форума Ответить с цитированием
Старый 16.03.2013, 20:01   #53
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Немного поэкспериментировал.
Код:
var
  i: integer;

begin
  asm
    mov i,101b //bin// 5  
    add i,0ah //hex// 10
    add i,15d //dec// 15
    add i,10o //oct// 8
  end;
  writeln(i); // 38
  readln;
end.

В общем никаких преобразований при работе программы не происходит. Ч.Т.Д.

Последний раз редактировалось Kix.IV; 16.03.2013 в 20:03.
Kix.IV вне форума Ответить с цитированием
Старый 16.03.2013, 20:13   #54
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Ссылка на генерируемый код в данном случае неправомерна.
У приведения типов нет и не может быть кода, т.к. это инструкции компилятору, притом, не той его части, что генерит код, а той, что осуществляет синтаксическую проверку.
А раз так, значит, вопрос лишь в том, как "обмануть" синтаксический анализатор компилятора.
Именно такой вариант и был предложен.
Я подумал, что он не понимает как это всё выглядит в "конце" и пытается "обмануть" . Вот и привёл здесь доказательство того, что и Char, и c:=@i одно и тоже.
Kix.IV вне форума Ответить с цитированием
Старый 16.03.2013, 20:46   #55
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Нет, это не одно и то же.
И доказательств "кодом" в данном случае не может быть, т.к. на код это никак не влияет по определению. Это особенности синтаксического анализатора, а не кодогенератора.

PS. Кстати, если бы вдруг оказалось, что генерируется разный код, то это ни в коей мере не являлось бы доказательством противного, а лишь указанием на (некритические) ошибки компилятора.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить определенный символ на номера попорядку? antoha487 Помощь студентам 2 04.07.2012 22:48
Ввод десятичного числа в качестве аргумента для номера строки и столбца курсора Cheater13 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.05.2011 18:34
Как в задаче указать КРАТНЫХ №3?и еще вывести номера элементов? ketik Помощь студентам 1 10.12.2010 15:31
Как вывести символ клавиши которую нажал Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.11.2010 17:20
Как вывести символ в позиции 80,25 ? sanya_m Помощь студентам 2 13.03.2010 02:10