问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c#中+运算左右操作数类型不同怎么处理方法

发布网友 发布时间:2022-04-07 10:43

我来回答

2个回答

懂视网 时间:2022-04-07 15:05

zend_op_array.opcodes 指向指令列表,具体每条指令的结构如下:

struct _zend_op { // *opline *opcodes
 const void *handler; //指令执行handler
 znode_op op1; //操作数1
 znode_op op2; //操作数类型实际就是个32位整形,它主要用于存储一些变量的索引位置、数值记录等等
 znode_op result; //返回值
 uint32_t extended_value;
 uint32_t lineno;
 zend_uchar opcode; //opcode指令
 zend_uchar op1_type; //操作数1类型
 zend_uchar op2_type;
 zend_uchar result_type; //返回值类型
};

//操作数结构
//比如赋值语句:"$a = 45;",两个操作数分别记录"$a"、"45"的存储位置,执行时根据op2取到值"45",
//然后赋值给"$a",而"$a"的位置通过op1获取到
//当然操作数并不是全部这么用的,上面只是赋值时候的情况,其它操作会有不同的用法
//如函数调用时的传参,op1记录的就是传递的参数是第几个,op2记录的是参数的存储位置,
//result记录的是函数接收参数的存储位置。
typedef union _znode_op { //操作数类型实际就是个32位整形,它主要用于存储一些变量的索引位置、数值记录等等
 uint32_t constant; //操作数记录着当前指令的关键信息, 可以用于变量的存储、访问
 uint32_t var;
 uint32_t num;
 uint32_t opline_num; /* Needs to be signed */
#if ZEND_USE_ABS_JMP_ADDR
 zend_op *jmp_addr;
#else
 uint32_t jmp_offset;
#endif
#if ZEND_USE_ABS_CONST_ADDR
 zval  *zv;
#endif
} znode_op;
//操作数有5种不同的类型;
#define IS_CONST (1<<0) //字面量,编译时就可确定且不会改变的值,比如:$a = "hello~",其中字符串"hello~"就是常量
#define IS_TMP_VAR (1<<1) //临时变量 $a = "hello~" . time(),其中"hello~" . time()的值类型就是IS_TMP_VAR
    //"123" + $b的结果类型也是IS_TMP_VAR,从这两个例子可以猜测,临时变量多是执行期间其它
 //类型组合现生成的一个中间值,由于它是现生成的,所以把IS_TMP_VAR赋值给IS_CV变量时不会增加其引用计数
#define IS_VAR (1<<2)//PHP变量
    //这个很容易认为是PHP脚本里的变量,其实不是,这里PHP变量的含义可以这样理解:PHP变量是没有显
    //式的在PHP脚本中定义的,不是直接在代码通过$var_name定义的
 //。这个类型最常见的例子是PHP函数的返回值,再如$a[0]数组这种,它取出的值也是IS_VAR,再比如$$a这种
#define IS_UNUSED (1<<3) /* Unused variable */ //表示操作数没有用
#define IS_CV (1<<4) /* Compiled variable */
 //PHP脚本变量,即脚本里通过$var_name定义的变量,这些变量是编译阶段确定的,所以是compile variable

 //result_type除了上面几种类型外还有一种类型EXT_TYPE_UNUSED (1<<5),返回值没有使用时会用到,
 //这个跟IS_UNUSED的区别是:IS_UNUSED表示本操作返回值没有意义(也可简单的认为没有返回值),
 //而EXT_TYPE_UNUSED的含义是有返回值,但是没有用到,比如函数返回值没有接收

更多PHP相关知识,请访问PHP中文网!

热心网友 时间:2022-04-07 12:13

需要分类判断:
1、左右两边都是字符串或者有一边是字符串,那么+就是两个字符串的连接符。
2、若两边都是数值类型,那么+做的是相加操作。(数值类型又分为多种,根据你想要得到的数值类型,需对其中一方进行类型转换)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
QQ空间里的好多东西怎么删不掉阿 我想把QQ上的文件全删掉,为什么有的删不掉呢。 4M宽带为什么有1M的下载速度 有什么办法治疗牙结石?还有晚上牙龈出血?有什么食物可以补充营养?曾经... 红米Note2开机以后不显示桌面但是有图标下面三个键都不好使您知道怎么... 红米Note2,酷我音乐盒桌面歌词没有,已经设置了,悬浮窗什么的也点... 大神们, 帮忙把下面文字翻译成英文吧! 急~~~ 机器君就算了 多谢啊 O... DIN 54801-2006 是德国什么标准 我想问一下" high melt viscosity at low shear rates"是什么意思? 请问谁有《喜羊羊与灰太狼》中,灰太狼说的“我一定会回来的”,和懒羊... 为什么安卓手机桌面花样比苹果手机多好看? cpu的opcode是什么意思?? 河南快递停运时间2021什么时候? 郑州云网智能科技有限公司怎么样? 郑州云网通信工程有限公司怎么样? 郑州云网科技有限公司怎么样? 万能的网友,跪求xshell安装包,网上找了很久没有找到 xshell解压jdk找不到文件 xshell 5注册机哪里可以下载,最好还要有注册激活教程的 求Xshell 6破解版 64 位下载,最好附带产品密钥 跪求xshell6破解版 请问大佬有Xshell 6破解补丁 免费版软件免费百度云资源吗 求Xshell 6破解版软件 Xshell 5.0中文破解版在哪下载,求提供一个下载地址谢谢 求分享一个Xshell6 汉化破解版,百度云下载 8086/8088的指令系统中操作数的类型有哪几种 oppofindx2pro可以人脸支付吗? oppoa37m怎么刷脸 锂电池怎么样充电才科学? 新买的电动车锂电池充电顺序弄错了 利息1.5分什么意思? 微信消息能发出去,红包也能发出去,就是打语音就提示对方未添加你为好友,到底是什么意思?_百度问一问 微信对方开启了好友验证发红包能发进去吗? 微信消息能发出去,红包也能发出去,就是打语音就提示对方未添加你为好友,到底是什么意思?_百度问一问 微信转账显示我不是收款方的好友,为什么却能给对方发红包,发消息?拉他进群时显示要得到对方同意。 微信红包可以发过去但转账时显示不是对方好友怎么回事 微信红包可以发,信息可以发,转账显示不是好友,怎么回事呢? 汇编中的opcode 是指机器指令码?还是参数?? 1314美金多少人民币 1314代表什么意思 世上最美的数字,不是1314是0736是什么意思 1314祝福词 1314代表什么?会是永远吗? 1314的意思是什么? 适合1314发的朋友圈 1314的简短句子 跪求好人 给我发1314句英文唯美的句子 。 送给我GF的。 网上拉的自重 。 好的追加悬赏啊!!!!!!! 1314和520是什么意思? 带套和不戴套是一样吗? 充电器上的20W,40w代表是什么意思