
c语言 不同数据类型间的混合运算
书上有个例子“6.0/5是将5转换成float型后进行运算,值是1.2”而自动转换里float型不是要自动转换成double型参与运算,而且是必须的转换。(即使两个flo...
书上有个例子
“6.0/5是将5转换成float型后进行运算,值是1.2”
而自动转换里float型不是要自动转换成double型参与运算,而且是必须的转换。(即使两个float型数据相加,也要先转换成double型,然后再相加)。
高手帮忙解释下啊,万分感谢!!!
书上写着
自动转换里float型要自动转换成double型参与运算,而且是必须的转换。(即使两个float型数据相加,也要先转换成double型,然后再相加)。
与
书上有个例子
“6.0/5是将5转换成float型后进行运算,值是1.2”
相矛盾了啊!??? 展开
“6.0/5是将5转换成float型后进行运算,值是1.2”
而自动转换里float型不是要自动转换成double型参与运算,而且是必须的转换。(即使两个float型数据相加,也要先转换成double型,然后再相加)。
高手帮忙解释下啊,万分感谢!!!
书上写着
自动转换里float型要自动转换成double型参与运算,而且是必须的转换。(即使两个float型数据相加,也要先转换成double型,然后再相加)。
与
书上有个例子
“6.0/5是将5转换成float型后进行运算,值是1.2”
相矛盾了啊!??? 展开
2个回答
展开全部
c语言里 不同数据类型间的混合运算会强制转换的``
`如6.0/5``结果必然向float型转换```
比如char short型参与运算都是先转为int型`
float转为double型
int double混合运算时转为double型
都是向着占用较大的方向转换``使适用范围也更大```
``书上应该说的比较详细了 `呵呵`
`如6.0/5``结果必然向float型转换```
比如char short型参与运算都是先转为int型`
float转为double型
int double混合运算时转为double型
都是向着占用较大的方向转换``使适用范围也更大```
``书上应该说的比较详细了 `呵呵`

2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
再回来说下,你可以这样进行检测,看隐式转换的问题还是溢出的问题:
typedef unsigned long long uint64;//最新的编译器都支持这种用法吧,总之你找个能表示64位的longlong就行了.
//uint
cout << (uint64)iu + (uint)i << endl;
这里先将i转换成uint型,此时未溢出,然后加上转换uint64(iu)的值,再将其提升为uint64,因为原来已经为uint型,所以提升为uint64时值不再改变,最后结果超出了uint的范围,如果你再对最终结果进行(uint),得到的答案你应该知道了.
------------------
溢出问题.
i=-8,转化为uint型后,为2^32-8,再加上个uint(10),结果为:
2^32+2,溢出后,结果为2.
你只考虑到一个很大的正数,却没有考虑到uint范围的问题!
typedef unsigned long long uint64;//最新的编译器都支持这种用法吧,总之你找个能表示64位的longlong就行了.
//uint
cout << (uint64)iu + (uint)i << endl;
这里先将i转换成uint型,此时未溢出,然后加上转换uint64(iu)的值,再将其提升为uint64,因为原来已经为uint型,所以提升为uint64时值不再改变,最后结果超出了uint的范围,如果你再对最终结果进行(uint),得到的答案你应该知道了.
------------------
溢出问题.
i=-8,转化为uint型后,为2^32-8,再加上个uint(10),结果为:
2^32+2,溢出后,结果为2.
你只考虑到一个很大的正数,却没有考虑到uint范围的问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询