我正在研究有符号-无符号整数转换,我得出了这些结论,有人能告诉我这是否正确吗?
unsigned short var = -65537u;步骤:
二进制表示: 0000 0000 0001 0000 0000 0001
二进制表示: 1111 1111 1110 1111 1111 1111
二进制表示:11111111111111
下列情况也应如此:
unsigned short var = -65541u;0000 0001 0000 0000 0101
1111 1111 1111 1011
1111 1111 1011
unsigned short var = -5u;万万
1111 1111 1111 1011
1111 1111 1011
发布于 2013-03-02 11:20:17
对于通常的平台( short为16位,int为32位),您的分析是正确的。
对于某些平台,常量65537可能不适合unsigned int,但如果是这样的话,65537u将被键入为更大的无符号类型。尝试的类型列表可以在C99标准的6.4.4.1:5节中找到。在C99中,它至少适合于unsigned long,这是由标准保证的,允许值这么大。
如果发生这种情况,则推理基本相同,直到转换回unsigned short进行分配为止。
相反,unsigned short被C99标准允许容纳超过16位。在本例中,var为您的第一个示例接收USHRT_MAX-65536,对于其他示例也是如此。
发布于 2013-03-02 10:49:04
short的大小取决于实现,而不是16位。16位是最小大小。
同样,一个int的大小也可能只有16位。
https://stackoverflow.com/questions/15173466
复制相似问题