Delphi中函数Odd(x)与(x Mod 2)有何区别?

2026-04-28 01:171阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计431个文字,预计阅读时间需要2分钟。

Delphi中函数Odd(x)与(x Mod 2)有何区别?

Delphi(实际上是一种Pascal方言)提供了Odd函数,用于检查一个整数是否为奇数:- 如果参数不能被2整除,则返回true,- 如果是偶数,则返回false。

使用方式如下:- `if Odd(x) then WriteLn('参数是奇数.') else WriteLn('参数是偶数.')- 或者,可以直接使用mod运算符。

例如:- `if x mod 2 0 then WriteLn('参数是奇数.') else WriteLn('参数是偶数.');`

Delphi(实际上是Pascal)具有函数Odd(x:integer):boolean,如果参数不能被2整除,则返回true,如果是,则返回false:

if Odd(x) then WriteLn('Argument is odd.') else WriteLn('Argument is even.')

或者,可以使用mod运算符:

if (x mod 2) <> 0 then WriteLn('Argument is odd.') else WriteLn('Argument is even.')

表现有什么不同吗?我希望编译器为系统函数生成优化代码.

我对Delphi 2007的答案特别感兴趣,但是如果有人可以检查其他Delphi版本那就太好了.

无论如何奇数是最好的;

Delphi中函数Odd(x)与(x Mod 2)有何区别?

对于x mod 2检查,性能取决于x是有符号整数还是无符号整数;为无符号类型生成的代码更有效.

Delphi XE编译器:

奇(X):

Project11.dpr.10: if Odd(x) then 0040F327 F645FC01 test byte ptr [ebp-$04],$01 0040F32B 741B jz $0040f348

x mod 2,无符号x(长字):

Project11.dpr.14: if (x mod 2) <> 0 then 0040F431 8B45FC mov eax,[ebp-$04] 0040F434 83E001 and eax,$01 0040F437 85C0 test eax,eax 0040F439 741B jz $0040f456

x mod 2,签名x(longint):

Project11.dpr.14: if (x mod 2) <> 0 then 0040F361 8B45FC mov eax,[ebp-$04] 0040F364 2501000080 and eax,$80000001 0040F369 7905 jns $0040f370 0040F36B 48 dec eax 0040F36C 83C8FE or eax,-$02 0040F36F 40 inc eax 0040F370 85C0 test eax,eax 0040F372 741B jz $0040f38f

本文共计431个文字,预计阅读时间需要2分钟。

Delphi中函数Odd(x)与(x Mod 2)有何区别?

Delphi(实际上是一种Pascal方言)提供了Odd函数,用于检查一个整数是否为奇数:- 如果参数不能被2整除,则返回true,- 如果是偶数,则返回false。

使用方式如下:- `if Odd(x) then WriteLn('参数是奇数.') else WriteLn('参数是偶数.')- 或者,可以直接使用mod运算符。

例如:- `if x mod 2 0 then WriteLn('参数是奇数.') else WriteLn('参数是偶数.');`

Delphi(实际上是Pascal)具有函数Odd(x:integer):boolean,如果参数不能被2整除,则返回true,如果是,则返回false:

if Odd(x) then WriteLn('Argument is odd.') else WriteLn('Argument is even.')

或者,可以使用mod运算符:

if (x mod 2) <> 0 then WriteLn('Argument is odd.') else WriteLn('Argument is even.')

表现有什么不同吗?我希望编译器为系统函数生成优化代码.

我对Delphi 2007的答案特别感兴趣,但是如果有人可以检查其他Delphi版本那就太好了.

无论如何奇数是最好的;

Delphi中函数Odd(x)与(x Mod 2)有何区别?

对于x mod 2检查,性能取决于x是有符号整数还是无符号整数;为无符号类型生成的代码更有效.

Delphi XE编译器:

奇(X):

Project11.dpr.10: if Odd(x) then 0040F327 F645FC01 test byte ptr [ebp-$04],$01 0040F32B 741B jz $0040f348

x mod 2,无符号x(长字):

Project11.dpr.14: if (x mod 2) <> 0 then 0040F431 8B45FC mov eax,[ebp-$04] 0040F434 83E001 and eax,$01 0040F437 85C0 test eax,eax 0040F439 741B jz $0040f456

x mod 2,签名x(longint):

Project11.dpr.14: if (x mod 2) <> 0 then 0040F361 8B45FC mov eax,[ebp-$04] 0040F364 2501000080 and eax,$80000001 0040F369 7905 jns $0040f370 0040F36B 48 dec eax 0040F36C 83C8FE or eax,-$02 0040F36F 40 inc eax 0040F370 85C0 test eax,eax 0040F372 741B jz $0040f38f