本篇博客将阐述、讨论的内容:
●int
int的范围根据计算机的不同存在16位或32位的差异,以16位举例,最大值为1111 1111 1111 1111,也就是65535,如果出现65536,就会溢出。
●unsigned int(无符号整型)
以16位系统为例,unsigned int能存储的数据范围是0~65535(需要注意整数是以补码形式存放)。其进行的是模数计算,也就是所谓的二进制相加减,计算方法和十进制加减并无区别,但是unsigned int有着正溢出和负溢出的问题。
对于正溢出与负溢出,诸多基础概念便不再赘述,不懂的朋友可以去回顾计算机组成原理的相关知识。
这里仅举出一个负溢出的例子:
进行自然丢弃后,可知结果为0。很明显,产生了负溢出。
●接下来,我们说说unsigned int和int的相互转化,代码如下:
float sum_elements(float a[],unsigend length){
float result = 0;
for(int i = 0; i <= length - 1; i++){
result += a[i];
return result;
}
}
很显然,计算一个数组所有元素之和。但当数组为空时,length输入0,会返回一个存储器错误。为什么呢?请看unsigned int的计算,length是unsigned int 类型,进行的是模数运