读书人

C语言类型转换结果?该怎么解决

发布时间: 2012-09-23 10:28:10 作者: rapoo

C语言类型转换结果?
《C语言核心技术》
转换成_Bool以外的无符号整数类型

对于一个正整数的值来说,常常有必要减去(USHRT_MAX+1),使得值落入新类型的范围内,这样的做法如同除以(USHRT_MAX+1)来求余数,如下面的范例所示:

C/C++ code
#include <limits.h>unsigned short n =0;   n=0xFEDCBA;                // int 转 unsigned short  int                                         /*                                              16位计算机:                                              0xFEDCBA - (USHRT_MAX+1)=16702650-(65535+1) = 16637114 =0xFDDCBA                                                                                            书本上的结果是:DCBA,计算的结果与书上不同,为什么呢?                                                */


如果unsigned short是16位长,那么其最大值USHRT_MAX+1就是16进制的FFFF。当FEDCBA的值被转换成unsigned short,结果就和除以16进制的10000(USHRT_MAX+1),再取余数一样,结果一定是FFFF或更少。
在这个例子中,被赋值给n的值是16进制的DCBA。

--------------------------------------------------------------------

这句话是什么意思?
谁详细说说!




[解决办法]
探讨

“对于一个正整数的值来说,常常有必要减去(USHRT_MAX+1),使得值落入新类型的范围内,这样的做法如同除以(USHRT_MAX+1)来求余数”

减法与除法求余数有什么关系?

读书人网 >C语言

热点推荐