C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – double to unsigned int / char大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我读了 here,那:

根据C99§6.3.1.4脚注50:

现在,我对以下之间的细微差别(这次是C 03!)感兴趣:

@H_502_13@double d1 = 257; double d2 = -2; unsigned char c1 = d1; // undefined,since d1 > 256 unsigned char c2 = d2; // undefined,since d2 < -1

@H_502_13@double d1 = 257; double d2 = -2; unsigned int i1 = d1; // defined,since d1 <= 2^32 unsigned int i2 = d2; // still undefined,right? unsigned char c1 = i1; // defined,modulo 2^8,so c1 == 1

所以第一个c1和第二个c1不能保证比较相等,对吗?上面的引文是否也适用于C 03,还是有其他规则?

编辑:

并且为了使c2定义(对于 – (2 ^ 31-1)< = d2< 0),这是必要的吗?

@H_502_13@double d2 = -2; int sign = (d2<0 ? -1 : 1); unsigned char c2 = sign * (int)abs(d2); // defined,c2 == 2^8-2 ?

解决方法

是的,同样的规则适用于C. (但是,我将按照C标准的2010年草案进行; C 2003是旧的.另外,我使用的是N3092,而不是官方草案.)第4.9条第1款说“如果截断值不能,则行为不明确以目的地类型表示.“

无符号整数运算确实包装;它的模数比模型的最大值模1.但是,这适用于类型内的算术运算.从浮点到无符号整数的转换不属于此.

转换d2的代码似乎比必要的更复杂.如果d2在int的范围内,则可以简单地使用unsigned char c2 =(int)d2;. (然从int到unsigned int的转换也在同构无符号整数运算之外,但是这个转换的规范确实说它的减少方式与无符号整数运算相同.)

大佬总结

以上是大佬教程为你收集整理的c – double to unsigned int / char全部内容,希望文章能够帮你解决c – double to unsigned int / char所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。