打印
[信息]

unsigned int赋值给int

[复制链接]
1794|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 | 只看该作者
这是科普帖,讲解不同类型的数据赋值需要注意的问题,希望路过的朋友也注意一下这个问题。

使用特权

评论回复
5
nyszx| | 2014-9-25 12:31 | 只看该作者
楼主在采用自问自答的方式解释这个问题的答案,很不错。

使用特权

评论回复
6
mmuuss586| | 2014-9-25 19:12 | 只看该作者

楼主这是分享经验啊;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

126

帖子

6

粉丝