[信息] unsigned int赋值给int

[复制链接]
2152|5
 楼主| TataJen 发表于 2014-9-25 09:33 | 显示全部楼层 |阅读模式
变量i是int型的,其数据范围-32768~32767,如将unsigned int型数65530赋给i后,i成为-6。请问i为什么不是6??

65530为无符号字符型,其内存中二进制为:1111 1111 1111 1010


int型占内存为二进制的16个位,其中第一位为正负号,0为正,1为负,当为负时,后15位为补码000 0000 0000 0110 = 6,加个前面的负号,结果即为-6。


注:负数补码是这么理解的:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。


反之:int 型-6,赋值给unsigned int型,变为65530.
例子函数:写入flash,函数1要求写入flash的是unsigned int u32data型, 实际上写入的是个int,这时要先把Int赋值给unsigned int型,然后调用下面函数1写入flash,
读取flash的时候:int型 =ReadWord(unsigned int addr);
上面转化用到了:写入flash:int 型转化为unsigned int 型,
                           读取flash:unsigned int 型转化为Int型,整个过程中数据并没有变化。
函数1无返回值:int DrvFlash_Burn_Word (unsigned int u32addr,
                       unsigned int u32DelayTime,
                       unsigned int u32data);

函数2返回Int型:int ReadWord(unsigned int addr);
amanda_s 发表于 2014-9-25 09:57 | 显示全部楼层
你自己不都已经解释了为什么是-6,不是6吗。
qq4988 发表于 2014-9-25 10:14 | 显示全部楼层
楼主这是自问自答,:)
airwill 发表于 2014-9-25 11:23 | 显示全部楼层
这是科普帖,讲解不同类型的数据赋值需要注意的问题,希望路过的朋友也注意一下这个问题。
nyszx 发表于 2014-9-25 12:31 | 显示全部楼层
楼主在采用自问自答的方式解释这个问题的答案,很不错。
mmuuss586 发表于 2014-9-25 19:12 | 显示全部楼层

楼主这是分享经验啊;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

126

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部