Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.061 c
15-1349987402
Юрий
2012-10-12 00:30
2013.03.22
С днем рождения ! 12 октября 2012 пятница


15-1337849446
Дмитрий С
2012-05-24 12:50
2013.03.22
Как правильно задать вопрос...


2-1342633944
Nilman
2012-07-18 21:52
2013.03.22
Фон StringGrid вне ячеек


15-1353188378
Smailer
2012-11-18 01:39
2013.03.22
Отключить Wi-Fi по умолчанию на Sumsung 530u


15-1331668402
tj.nelson
2012-03-13 23:53
2013.03.22
Реестр windows xp x64 и delphi 7