首页
社区
课程
招聘
[翻译][原创]IDC脚本系列 - IDC:表达式
发表于: 2017-7-6 17:05 3788

[翻译][原创]IDC脚本系列 - IDC:表达式

2017-7-6 17:05
3788

在IDC脚本中,除了 += 这个表达式之外,其他所有的C语言的表达式都可以直接使用

常量的定义跟C语言很类似,但是也有一点点小区别,比如IDC支持以下四种数据转换操作:

long(expr) 转换过程中,浮点会被截断,转换成long型

char(expr)

float(expr)

_int64(expr)

在大部分情况下,在IDC脚本中不需要进行显式的类型转换操作,IDC脚本内部会进行自动的转换,规则如下:

加 操作:

如果2个操作数都是字符串,直接进行字符串拼接

如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)

如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算

对于其他的情况,两个操作数全部转换成long型再计算

减/乘/除:

如果存在浮点操作数,则2个操作数全部转换成浮点再计算

如果两个操作数都是对象并且操作是减,直接执行减法操作(返回一个新对象)

对于其他的情况,两个操作数全部转换成long型再计算

比较操作(==, !=, etc):

如果两个操作数都是字符串,直接进行字符串比较操作

如果存在浮点操作数,两个操作数都转换成浮点再比较

其他的情况,都转换成数字再比较

其他操作符

一律转换成long型进行计算

如果其中一个long型数据是64位的,那么其他的操作数也会转换成64位的

类型转换这个事情还有一个例外的情况:如果一个操作数是字符串,另外一个是0, 那么最后会执行字符串操作,0会被转换成一个空字符串

&符号可以用来取变量的引用, 你可以像使用指针那样来使用引用,通过引用来修改原始对象的值。需要注意的是引用变量一旦创建就不能修改了,不像C语言的指针那样,可以指来指去。还是举个例子吧:

引用的引用还是直接指向原始的对象,例子如下:

在给函数传参的时候,默认情况下非对象类型都是值传递的,有的时候,非对象类型通过引用传参是一个不错的选择。


     如果翻译的有问题,请大家多指教留言哈,我再更正更正,或者直接到我的博客喷也可以, http://blog.csdn.net/freakishfox

auto x, r;
r = &x;
r = 1;   // x is equal to 1 now
auto x, r1, r2;
r1 = &x;
r2 = &r1; // r2 points to x
  • 在IDC脚本中,除了 += 这个表达式之外,其他所有的C语言的表达式都可以直接使用

  • 常量的定义跟C语言很类似,但是也有一点点小区别,比如IDC支持以下四种数据转换操作:

    1. long(expr) 转换过程中,浮点会被截断,转换成long型

    2. char(expr)

    3. float(expr)

    4. _int64(expr)

  • 在大部分情况下,在IDC脚本中不需要进行显式的类型转换操作,IDC脚本内部会进行自动的转换,规则如下:

    • 加 操作:

      1. 如果2个操作数都是字符串,直接进行字符串拼接

      2. 如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)

      3. 如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算

      4. 对于其他的情况,两个操作数全部转换成long型再计算

    • 减/乘/除:

      1. 如果存在浮点操作数,则2个操作数全部转换成浮点再计算

      2. 如果两个操作数都是对象并且操作是减,直接执行减法操作(返回一个新对象)

      3. 对于其他的情况,两个操作数全部转换成long型再计算

    • 比较操作(==, !=, etc):

      1. 如果两个操作数都是字符串,直接进行字符串比较操作

      2. 如果存在浮点操作数,两个操作数都转换成浮点再比较

      3. 其他的情况,都转换成数字再比较

    • 其他操作符

      1. 一律转换成long型进行计算

  • 如果其中一个long型数据是64位的,那么其他的操作数也会转换成64位的

  • 类型转换这个事情还有一个例外的情况:如果一个操作数是字符串,另外一个是0, 那么最后会执行字符串操作,0会被转换成一个空字符串

  • &符号可以用来取变量的引用, 你可以像使用指针那样来使用引用,通过引用来修改原始对象的值。需要注意的是引用变量一旦创建就不能修改了,不像C语言的指针那样,可以指来指去。还是举个例子吧:

    auto x, r;
    r = &x;
    r = 1;   // x is equal to 1 now

    引用的引用还是直接指向原始的对象,例子如下:

    auto x, r1, r2;
    r1 = &x;
    r2 = &r1; // r2 points to x
  • 在给函数传参的时候,默认情况下非对象类型都是值传递的,有的时候,非对象类型通过引用传参是一个不错的选择。

  • 加 操作:

    1. 如果2个操作数都是字符串,直接进行字符串拼接

    2. 如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)

    3. 如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算

    4. 对于其他的情况,两个操作数全部转换成long型再计算

  • 减/乘/除:

    1. 如果存在浮点操作数,则2个操作数全部转换成浮点再计算

    2. 如果两个操作数都是对象并且操作是减,直接执行减法操作(返回一个新对象)

    3. 对于其他的情况,两个操作数全部转换成long型再计算

  • 比较操作(==, !=, etc):

    1. 如果两个操作数都是字符串,直接进行字符串比较操作

    2. 如果存在浮点操作数,两个操作数都转换成浮点再比较

    3. 其他的情况,都转换成数字再比较

  • 其他操作符

    1. 一律转换成long型进行计算

  1. long(expr) 转换过程中,浮点会被截断,转换成long型

  2. char(expr)

  3. float(expr)

  4. _int64(expr)

  1. 如果2个操作数都是字符串,直接进行字符串拼接

  2. 如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)

  3. 如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算

  4. 对于其他的情况,两个操作数全部转换成long型再计算


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
2
一篇文章拆成七八篇发,有意思么?
2017-7-6 17:15
0
雪    币: 1157
活跃值: (847)
能力值: ( LV8,RANK:150 )
在线值:
发帖
回帖
粉丝
3
额,我只是抽空按照原手册的排版来翻译的,并不是一篇文章,没有刻意拆分的意思,版主不要误会,  只是这几天翻译的东西下午有空发了一下而已
2017-7-6 17:24
0
雪    币: 7012
活跃值: (4222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
翻译的是哪个版本的?
2017-7-7 00:59
0
雪    币: 1157
活跃值: (847)
能力值: ( LV8,RANK:150 )
在线值:
发帖
回帖
粉丝
5
官方网站上直接翻的,应该是最新的版本,接下来的还会继续,只能上班回来晚上整一会儿
2017-7-9 23:29
0
游客
登录 | 注册 方可回帖
返回
//