Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.062 c
15-1340051402
Юрий
2012-06-19 00:30
2013.03.22
С днем рождения ! 19 июня 2012 вторник


3-1287553350
mindgamer
2010-10-20 09:42
2013.03.22
Не добавляется запись в TTable


2-1333615730
Yl2011
2012-04-05 12:48
2013.03.22
Использование TCanvas для определения размера шрифта


2-1328618080
JohnKorsh
2012-02-07 16:34
2013.03.22
Работа с MediaPlayer.


15-1335276392
Anton Nagornyi
2012-04-24 18:06
2013.03.22
Халтура. BASS обработка звука





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский