matlab中强制类型转换_类型转换

上一期提到:

类似这种自动的数据类型转化被称作隐式类型强制转换 (implicit type coercion)。隐式类型强制转换会造成意外。

仍然是上期使用过的例子,隐式类型强制转换造成的结果出现误差。

为了避免出现意外,C++提供了明式类型转换,允许程序员通过使用类型转换操作 (cast operator) 主动转换数据的类型。

类型转换操作也可直接称为类型转换 (type conversion/type casting)

类型转换有两种格式:

  • static_cast (表达式)

  • 数据类型(表达式)

static_cast形式会更加稳定。

两种casting形式都可以得到同样的结果

再来看之前那个5除以2再加1.5的例子。

为什么结果是一样的?

因为先算括号内的,先5除以2,又根据除号两边都是整数,所以得到的结果是整数的,得到的结果再进行的casting,所以是把整数结果2转化成了double形式,就是2.0。

正确的思路应该是先把5和2这两个中的至少一个整数转化成了浮点数,再进行除法。

使用类型转换把浮点数转换成整数时,小数点后的部分会被之间扔掉,不会进行四舍五入等操作。

11除以3等于3.6666循环

目前要注意一点,小数点后只有0的浮点数的默认输出形式会省略小数点和小数点后的0,后面某期会讲怎么告诉计算机浮点数的输出格式,比如保留小数点后几位。

类型转换同样可是存在于char和int之间,根据 ASCII 的顺序位置进行转换。

由上图可知,E(大写)是第69位。

以下是我没有权威书本参考的胡乱猜测!!!

bool 转 int:

首先我们知道 true 的是1,false 的是0,所以 bool 转 int 的情况下,所有的 true 都转换成1,false 都转换成0。

甚至能参与运算,虽然不知道什么情况会用上。

Ev的阴间用法01

int 转 bool:

Ev的阴间用法02

由上图猜测,只有1和0能正常转换,其他整数一律转换成 true,也就是1。依旧是不知道有什么逻辑的用法。

int 转 char:

ASCII 除了0到127,后来还进行了一次扩展,有了128到255的字符。

注意加 system("chcp 437>>null");

关于超出255的整数怎么转换成 char,我在晚上查的是需要换算的方法。

简单地说就是需要先把那个整数换成16进制,再舍弃高位字节保留低位字节,再把低位部分根据ASCII找到对应的char。

由于我是个懒人,不爱转换,太麻烦了!虽然不是我换算,所以我找到了另一个思路。

首先char是个只有4个字节的数据类型,4个字节最大就是255,用整数除以255得到的余数再对应 ASCII 就是对应的char。

用代码验证了一下,确实没问题。(夸我)

float/double 转 char:

69是E是对的,可是为什么70也是E啊?70应该是F,可为什么71又是F?等等!为什么会有71.1?不应该停在71了吗?

然后我尝试在d += 0.1的0.1后面加了个f:

一切恢复正常。是我大意了,计算机在处理浮点数上面总是很让我头疼。

简单的查了一下这个f和加这个f的意义,还是没很明白,反正就有说f就是float,加f就表示是float类型,不然会预设为double类型。我加f纯属是在隔壁写C#脚本的时候习惯的。

总之,我推测在浮点数转 char 上,会隐式类型强制转换把浮点数转换成整数再转换成char类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值