long转换为int后,int里的数据是long的高16位还是低16位的?

janno025 2011-09-16 03:00:45
新手求教!long能转转换为int吗?(假设long为32位,int为16位)
如果能,int里的数据是long的低16位吗?
...全文
755 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljhhh0123 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 janno025 的回复:]
还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?
[/Quote]
char ch=0xff;
ch=ch*0xff/0xff;
不能溢出,因为C规定,小于整型的宽度都转成整型运算后再转回去.
C标准要求转换操作时要尽量保留原来的值大小.

不过最好不要写这种挑战极限的代码.
modicum_ck 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 demon__hunter 的回复:]
如果long的值,在能被int所正确表示范围内的话,c标准保证会转换成功,这个显然易见的。
如果long的值超出了被int所正确表示的范围内的话,由实现来定义转换后的结果。可能会int里的数据是long的低16位,也可能不会。
[/Quote]
++
机智的呆呆 2011-09-16
  • 打赏
  • 举报
回复
如果long的值,在能被int所正确表示范围内的话,c标准保证会转换成功,这个显然易见的。
如果long的值超出了被int所正确表示的范围内的话,由实现来定义转换后的结果。可能会int里的数据是long的低16位,也可能不会。
hrx1989 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 janno025 的回复:]

还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?
[/Quote]

一定是溢出的。。
AnYidan 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wangbishi22 的回复:]
引用 4 楼 janno025 的回复:
还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?

溢出肯定是存在的,但是这个数据的值不会变啊,一直是0xff.
前提是数据为unsigned类型
[/Quote]

如过 n 是 float / double 呢?
君恪 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 janno025 的回复:]
还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?
[/Quote]
溢出肯定是存在的,但是这个数据的值不会变啊,一直是0xff.
前提是数据为unsigned类型
如此的肤浅 2011-09-16
  • 打赏
  • 举报
回复
那个应该不能转换吧,一转换差别大的去了
pjl1119 2011-09-16
  • 打赏
  • 举报
回复
由高到低强制转换,保留低位
东莞某某某 2011-09-16
  • 打赏
  • 举报
回复
你可以 long lTmp = 1 ; int iTmp = (int)lTmp; 测试一下
bcj00000 2011-09-16
  • 打赏
  • 举报
回复
注意大端,小端!
赵4老师 2011-09-16
  • 打赏
  • 举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
xwfde 2011-09-16
  • 打赏
  • 举报
回复
任何截断都取低位。
出现乘法会增加至32位进行运算,算完后赋值时再次截断,不过八位的0xff是负一,乘除6后肯定还是负一。
赵忠道:“调试看汇编一切皆自明”
烈火蜓蜻 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 janno025 的回复:]

还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?
[/Quote]

这样的话,值就不再是原来的数据了,

zhanshen2891 2011-09-16
  • 打赏
  • 举报
回复
测试一下呗,我觉得应该会还原
janno025 2011-09-16
  • 打赏
  • 举报
回复
还有一个问题,一个8位数据,如果值为0xff,乘以n,再除以n,此数据会溢出不?
yinlijun2001 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 janno025 的回复:]
新手求教!long能转转换为int吗?(假设long为32位,int为16位)
如果能,int里的数据是long的低16位吗?
[/Quote]
正解
turing-complete 2011-09-16
  • 打赏
  • 举报
回复
截断高位,保留低位
justonceup 2011-09-16
  • 打赏
  • 举报
回复
低16位

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧