c语言long long(int64)和int(int32)之间如何安全的互相转换? 50

如题:在C语言中带符号的64位int和32位int如何安全的互相转换?比如32位转64位时负数不丢失符号;64位转32位时如果正数很大丢失一部分高位数值,但转换后的32位... 如题:
在C语言中带符号的64位int和32位int如何安全的互相转换?
比如32位转64位时负数不丢失符号;
64位转32位时如果正数很大丢失一部分高位数值,但转换后的32位不会变成负数;
还有负数的64位转32位
展开
 我来答
帐号已注销
2021-01-23 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:166万
展开全部

int aa = (Int32)((((long)4294917296) << 32)>>32);

int32赋值给int64,因为int64的表示范围更大,此时直接赋值,一定安全;

int64赋值给int32,如果int64中的数据值不超过int32的表示范围,没问题,如果超出范围就会溢出,不能安全转换。

就是int乘以int默认使用int做的,有可能不够长,所以强制转换。当然这种解释只能是一种常见说法,还需要结合平台,与编译器。这种东西,没有定论的。只有实践才能看到结果。如果实际产品中,显然需要杜绝默认类型转换的发生。

扩展资料:

Int64 为比较此类型的实例、将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。警告在32位Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 Int64 字段,则该字段的最终值是无法预测的。

参考资料来源:百度百科-int64

tattackor
2015-10-31 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:888万
展开全部
1、64位的int转换int32不能单纯的用C的强制类型转换那么简单,要用算法做到的,说白了就是精度降低。这个已经不是转换那么简单了。举个例子吧,32位的真彩色图片,转变为16位的彩色图片,原理是一样的,精度转换降低。

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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mafangsan
推荐于2017-09-09 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2587万
展开全部

c语言long long(int64)和int(int32)之间如何安全的互相转换要看具体情况。

 

细节如下:

  1. int32赋值给int64,因为int64的表示范围更大,此时直接赋值,一定安全;

  2. int64赋值给int32,如果int64中的数据值不超过int32的表示范围,没问题,如果超出范围就会溢出,不能安全转换。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
处女座Hades
2015-03-29
知道答主
回答量:10
采纳率:0%
帮助的人:4.5万
展开全部
呵呵,我告诉你啊 64位的int转换int32不能单纯的用C的强制类型转换那么简单,要用算法做到的,说白了就是精度降低。这个已经不是转换那么简单了。举个例子吧,32位的真彩色图片,转变为16位的彩色图片,原理是一样的,精度转换降低。

比如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了。

如何写语句实现转换?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0af3397
2015-04-16
知道答主
回答量:44
采纳率:0%
帮助的人:20.1万
展开全部
用if判断每种不同的情况就行了,然后取模就行了
追问
能给个详细代码吗?
追答
爪机就不码了,给你思路吧
int32转64,正数时直接赋值,负数转正数赋值后转负数
int64转32同理,正数模2^31后赋值,负数转正后模2^31赋值后转负
望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式