Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизSizeOf( ж ); Найти похожие ветки
← →
Дмитрий С © (2012-04-04 12:33) [0]Delphi XE, XE2.
program Project2;
{$APPTYPE CONSOLE}
begin
Writeln(SizeOf("Ж"));
Writeln(SizeOf("Z"));
Readln;
end.
Вывод:
1
2
Чем буква Z лучше буквы Ж?
← →
Sha © (2012-04-04 12:36) [1]размером
← →
Дмитрий С © (2012-04-04 12:39) [2]И вопрос 2: где логика?
Еще можно было бы понять, если бы Ж занимала 2 байта, а Z - 1, но почему наоборот?!
← →
Sha © (2012-04-04 12:48) [3]Наверно, они разных типов.
← →
картман © (2012-04-04 12:52) [4]
> Sha © (04.04.12 12:48) [3]
>
> Наверно, они разных типов.
да, да, точно, ты прав)))
← →
CRLF (2012-04-04 12:54) [5]Видимо, то, что соответствует кодовой странице «Текущий язык программ, не поддерживающих Unicode», считается AnsiChar...
← →
oldman © (2012-04-04 12:55) [6]Потому, что Ж=ZH
← →
Sha © (2012-04-04 13:04) [7]есть третья вещь которая не перестает удивлять меня,
это смысл, который программист вкладывает в выражение SizeOf(0)
← →
Дмитрий С © (2012-04-04 13:08) [8]
> Потому, что Ж=ZH
И?
> Видимо, то, что соответствует кодовой странице «Текущий
> язык программ, не поддерживающих Unicode», считается AnsiChar.
> ..
Хорошее предположение, сейчас проверю.
← →
Sha © (2012-04-04 13:10) [9]еще проверь есть ли "Z" на этой кодовой странице
← →
AV © (2012-04-04 13:19) [10]интересно, тоже попробовал
delphi 7
program Project1;
{$APPTYPE CONSOLE}
var
q: Char;
w: AnsiChar;
e: WideChar;
begin
Writeln(SizeOf(0)); //1, т.к. уместил в байт?
Writeln(SizeOf(257)); //2, т.к. уместил в 2байта?
Writeln;
Writeln(SizeOf(q)); //1
Writeln(SizeOf(w)); //1
Writeln(SizeOf(e)); //2
Writeln;
Readln;
end.
← →
Anatoly Podgoretsky © (2012-04-04 13:19) [11]Writeln(Ord("Ж"));
Writeln(Ord("Z"));
← →
Дмитрий С © (2012-04-04 13:30) [12]
> Anatoly Podgoretsky © (04.04.12 13:19) [11]program Project2;
{$APPTYPE CONSOLE}
begin
Writeln(Ord("Ж"));
Writeln(Ord("Z"));
Writeln(SizeOf(Ord("Ж")));
Writeln(SizeOf(Ord("Z")));
Readln;
end.
198
90
1
2
> AV © (04.04.12 13:19) [10]
Так у тебя все по-честному.
← →
Anatoly Podgoretsky © (2012-04-04 13:34) [13]> Дмитрий С (04.04.2012 13:30:12) [12]
Z он преобразовал как Юникод, а Ж не захотел.
← →
Anatoly Podgoretsky © (2012-04-04 13:35) [14]Мораль сей басни такова, хочется однозначно, то или в переменную нужного типа, или явное указание типа, не generic
← →
Anatoly Podgoretsky © (2012-04-04 13:38) [15]Последствия могут быть хуже и не понятней.
← →
Дмитрий С © (2012-04-05 19:42) [16]И все же это какой-то нелогичный бред, видимо, с целью вызвать больше глюков и отучить программистов делать вроде C in ["а".."я"]
← →
Sha © (2012-04-05 20:13) [17]> Дмитрий С © (05.04.12 19:42) [16]
SizeOf("Ж") тебе нужен с другой целью?
← →
Игорь Шевченко © (2012-04-05 20:58) [18]
> И все же это какой-то нелогичный бред
В посте [1] ? абсолютно согласен.
← →
Дмитрий С © (2012-04-05 21:00) [19]
> Sha © (05.04.12 20:13) [17]
Вызывает возмущение вообще такой подход. Вот например еще один пример:
Const
A = "Ж";
B = "ЖЖ";
...
writeln(A=B[1]); // FALSE
← →
Sha © (2012-04-05 21:13) [20]> Вызывает возмущение вообще такой подход
это точно: тип не указан, запутать хотел?
← →
brother © (2012-04-05 21:16) [21]> writeln(A=B[1]); // FALSE
а так?
A[1]=B[1]
← →
Дмитрий С © (2012-04-05 22:12) [22]
> brother © (05.04.12 21:16) [21]
Так не компилируется
E2016 Array type required
← →
han_malign (2012-04-06 09:30) [23]
> Вот например еще один пример:
(BDS-2006)var wc: WideChar;
...
wc:= "Ж";
writeln(ord(wc)); // 198
- ну нету в Delphi RTL аналога Ц-шного mbtowc/wctomb и соответствующей магии...
З.Ы. Я тут недавно напоролся на "наивный юникод" в сторонней библиотеке.
Поверх SOAP - приходит вроде как честный юникод, но... - кодовая страница 0080-00FF - Latin-1 Supplement(aka ISO 8859-1, ~ CP-1252), при честном выводе - абракадабра с циркумфлексами...
Руками лишние нули обрубил - CP-1251...
И не абы какой проект вроде - Alcatel-Genesys(тм).
← →
Alcatel-Genesys (2012-04-06 11:43) [24]У нас всё работает. (с)
← →
Юрий Зотов © (2012-04-06 11:58) [25]
> Дмитрий С © (04.04.12 12:33)
Очевидно, что SizeOf("ж") - величина непостоянная и у каждого своя. Поэтому удивляться нечему, все так и должно быть.
← →
Думкин © (2012-04-06 12:08) [26]У кого кресло шире у того и размер больше.
← →
Дмитрий С © (2012-04-06 12:28) [27]
> Юрий Зотов © (06.04.12 11:58) [25]
Так вот почему так?
← →
Игорь Шевченко © (2012-04-06 12:39) [28]Дмитрий С © (06.04.12 12:28) [27]
View|Debug Windows|CPU покажет точную причину
← →
CRLF (2012-04-06 12:57) [29]Он показывает, что будет делать процессор, а не "почему компилятор решил уместить Ж в один байт, а Z — в два".
← →
Sha © (2012-04-06 13:17) [30]и так ясно почему, потому что не телепает ни фига
← →
Sha © (2012-04-06 13:24) [31]хотя, конечно, было бы приятней, если б он телепал одинаково,
только вопрос все равно остается, как я дотелепаю до того,
до чего дотелепал он
← →
CRLF (2012-04-06 14:18) [32]известно как: телепатически
← →
Sha © (2012-04-06 14:32) [33]потребуется отключить мозг
← →
DVM © (2012-04-06 15:25) [34]
> Sha © (04.04.12 12:48) [3]
> Наверно, они разных типов.program Project2;
{$APPTYPE CONSOLE}
const
a = "Ж";
b = "Z";
begin
Writeln(SizeOf(a));
Writeln(SizeOf(b));
Readln;
end.
Если навести мышку на a или b показывает, что и там и сям System.AnsiChar
← →
Sha © (2012-04-06 15:36) [35]> DVM © (06.04.12 15:25) [34]
> Если навести мышку на a или b показывает, что и там и сям System.AnsiChar
а выводит что? если не 1 1, то баг, однозначно
а если нужно еще больше однозначности, почему бы не написать так
(правда, не могу это проверить)
program Project2;
{$APPTYPE CONSOLE}
const
a: AnsiChar= "Ж";
b: AnsiChar= "Z";
begin
Writeln(SizeOf(a));
Writeln(SizeOf(b));
Readln;
end.
← →
Дмитрий С © (2012-04-06 15:49) [36]
> Sha © (06.04.12 15:36) [35]
program Project2;
{$APPTYPE CONSOLE}
const
a: AnsiChar= "Ж";
b: AnsiChar= "Z";
begin
Writeln(SizeOf(a));
Writeln(SizeOf(b));
Readln;
end.
1
1
program Project2;
{$APPTYPE CONSOLE}
const
a = "Ж";
b = "Z";
begin
Writeln(SizeOf(a));
Writeln(SizeOf(b));
Readln;
end.
1
2
> а если нужно еще больше однозначности, почему бы не написать
> так
Так можно, но тогда и придется и так:if A[1] = WideChar("Ж") then
Ну некрасиво это.
← →
DVM © (2012-04-06 15:50) [37]
> Sha © (06.04.12 15:36) [35]
> а выводит что?
1
2
← →
Sha © (2012-04-06 15:58) [38]> Дмитрий С © (06.04.12 15:49) [36]
> Так можно, но тогда и придется и так:
> if A[1] = WideChar("Ж") then
> Ну некрасиво это.
количество констант не ограничено, можно и так:c: WideChar= "Ж";
> DVM © (06.04.12 15:50) [37]
да уж
← →
Anatoly Podgoretsky © (2012-04-06 17:25) [39]> DVM (06.04.2012 15:25:34) [34]
Да кто же отладчику верит?
← →
Anatoly Podgoretsky © (2012-04-06 17:26) [40]> Sha (06.04.2012 15:36:35) [35]
А еще лучше так
b := AnsiChar("Z");
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.063 c