zui*_*iqo 5 matlab type-systems dynamic-typing
Matlab的动态类型很弱,这就是造成这种奇怪行为的原因.我不明白的是究竟发生了什么,因为这个结果让我感到惊讶.
编辑:为了澄清,我所描述的显然是Matlab以ASCII格式存储字符的结果,这也在评论中提到.我对Matlab处理变量的方式更感兴趣,特别是它如何以及何时为值分配类型/标记.
谢谢.
'1'
Run Code Online (Sandbox Code Playgroud)
是matlab中的1乘1字符矩阵
'123'
Run Code Online (Sandbox Code Playgroud)
是一个1乘3的字符矩阵.
正如所料,
1
Run Code Online (Sandbox Code Playgroud)
返回一个1乘1.
现在,如果我进入
'1' + 1
Run Code Online (Sandbox Code Playgroud)
我得到50作为1对1的双倍,如果我进入
'123' + 1
Run Code Online (Sandbox Code Playgroud)
我得到1比3的双倍
[ 50 51 52 ]
Run Code Online (Sandbox Code Playgroud)
此外,如果我输入
'a' + 1
Run Code Online (Sandbox Code Playgroud)
结果是
98
Run Code Online (Sandbox Code Playgroud)
以1比1的双倍.
我假设这与matlab如何以ascii形式存储char变量有关,但它究竟是如何处理这些?数据是否实际上是统一的和标记的,或者它是如何工作的?
谢谢.
在MATLAB中,字符串只是ASCII字符的向量.你可以在维基百科上看到关于ascii的更多信息.
混合字符和双精度时,MATLAB会将字符转换为等效的ASCII数并返回结果.所以'1'变得49和49 + 1 = 50.
当你写'123' + 1这个,[49 50 51] + 1并且MATLAB正确计算结果,[50 51 52]因为标量数加上一个向量导致将标量数添加到向量的每个元素.
最后,'a'有整数值97所以这一切都解决了.
编辑:
请注意,您可以使用MATLAB命令str2double将字符转换为其实际数字表示,如下所示:
str2double('1') + 1
str2double('123') + 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |