-
-
[翻译][原创]IDC脚本系列 - IDC:表达式
-
发表于:
2017-7-6 17:05
3788
-
[翻译][原创]IDC脚本系列 - IDC:表达式
在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支持以下四种数据转换操作:
long(expr) 转换过程中,浮点会被截断,转换成long型
char(expr)
float(expr)
_int64(expr)
在大部分情况下,在IDC脚本中不需要进行显式的类型转换操作,IDC脚本内部会进行自动的转换,规则如下:
加 操作:
如果2个操作数都是字符串,直接进行字符串拼接
如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)
如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算
对于其他的情况,两个操作数全部转换成long型再计算
减/乘/除:
如果存在浮点操作数,则2个操作数全部转换成浮点再计算
如果两个操作数都是对象并且操作是减,直接执行减法操作(返回一个新对象)
对于其他的情况,两个操作数全部转换成long型再计算
比较操作(==, !=, etc):
如果两个操作数都是字符串,直接进行字符串比较操作
如果存在浮点操作数,两个操作数都转换成浮点再比较
其他的情况,都转换成数字再比较
其他操作符
一律转换成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
在给函数传参的时候,默认情况下非对象类型都是值传递的,有的时候,非对象类型通过引用传参是一个不错的选择。
加 操作:
如果2个操作数都是字符串,直接进行字符串拼接
如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)
如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算
对于其他的情况,两个操作数全部转换成long型再计算
减/乘/除:
如果存在浮点操作数,则2个操作数全部转换成浮点再计算
如果两个操作数都是对象并且操作是减,直接执行减法操作(返回一个新对象)
对于其他的情况,两个操作数全部转换成long型再计算
比较操作(==, !=, etc):
如果两个操作数都是字符串,直接进行字符串比较操作
如果存在浮点操作数,两个操作数都转换成浮点再比较
其他的情况,都转换成数字再比较
其他操作符
一律转换成long型进行计算
long(expr) 转换过程中,浮点会被截断,转换成long型
char(expr)
float(expr)
_int64(expr)
如果2个操作数都是字符串,直接进行字符串拼接
如果2个操作数都是对象,直接进行对象的组合(返回一个新对象)
如果其中一个操作数是浮点,则两个操作数全部转换成浮点来计算
对于其他的情况,两个操作数全部转换成long型再计算
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课