c语言long long(int64)和int(int32)之间如何安全的互相转换? 50
在C语言中带符号的64位int和32位int如何安全的互相转换?
比如32位转64位时负数不丢失符号;
64位转32位时如果正数很大丢失一部分高位数值,但转换后的32位不会变成负数;
还有负数的64位转32位 展开
int aa = (Int32)((((long)4294917296) << 32)>>32);
int32赋值给int64,因为int64的表示范围更大,此时直接赋值,一定安全;
int64赋值给int32,如果int64中的数据值不超过int32的表示范围,没问题,如果超出范围就会溢出,不能安全转换。
就是int乘以int默认使用int做的,有可能不够长,所以强制转换。当然这种解释只能是一种常见说法,还需要结合平台,与编译器。这种东西,没有定论的。只有实践才能看到结果。如果实际产品中,显然需要杜绝默认类型转换的发生。
扩展资料:
Int64 为比较此类型的实例、将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。警告在32位Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 Int64 字段,则该字段的最终值是无法预测的。
参考资料来源:百度百科-int64
2、比如64位int变成32位int,应该是64位int数值每两个位对应32位int数值的一个位对吧,两个位的值最大为3,所以应该这么做,64位的int数值位0 和位1 如果>=2的话,那么32位int的数值的位0设置为1, 如果<2,则32位int数值的位0设置为0, 一次类推64位int数据的位2和位3,对应32位int数值的位1。
c语言long long(int64)和int(int32)之间如何安全的互相转换要看具体情况。
细节如下:
int32赋值给int64,因为int64的表示范围更大,此时直接赋值,一定安全;
int64赋值给int32,如果int64中的数据值不超过int32的表示范围,没问题,如果超出范围就会溢出,不能安全转换。
比如64位int变成32位int,应该是64位int数值每两个位对应32位int数值的一个位对吧,两个位的值最大为3,所以应该这么做,64位的int数值位0 和位1 如果>=2的话,那么32位int的数值的位0设置为1, 如果<2,则32位int数值的位0设置为0, 一次类推64位int数据的位2和位3,对应32位int数值的位1.。。。。等等,明白了 这就是降低精度的算法。
这是int类型,不是浮点。。。
我想用不着那么麻烦,int64转int32肯定要丢失数据的。
我想的是如果int64正数转int32,直接把int32里面写入32位可以表示的最大正数就可以了。负数同理,直接写入最小的负数了事。
反过来int32转int64则只要符号对就OK了。
如何写语句实现转换?
能给个详细代码吗?
爪机就不码了,给你思路吧
int32转64,正数时直接赋值,负数转正数赋值后转负数
int64转32同理,正数模2^31后赋值,负数转正后模2^31赋值后转负
望采纳