我们知道无符号类型,例如“unsigned short”或“unsignedint”型数据在相加达到最大值后,会发生从0开始重新计数的情况,以下就是对一个“unsignedshort”类型进行“++”操作的结果:
liCount = 65533
liCount = 65534
liCount = 65535
liCount = 0
liCount = 1
liCount = 2
可是对于有符合类型,如“short”、“int”、“long”、或“longlong”型数据在相加后达到最大值后,会发生什么情况呢,于是对一个“int”型数据进行了“++”操作的测试,结果如下:
iCount = 2147483645
liCount = 2147483646
liCount = 2147483647
liCount = -2147483648
liCount = -2147483647
liCount = -2147483646
可见其数据的达到最大后,变成了最大绝对值的负数;通过上述测试判断,如果只想使用其大于0的有符合类型数据,需要自己加以保护了。
liCount = 65533
liCount = 65534
liCount = 65535
liCount = 0
liCount = 1
liCount = 2
可是对于有符合类型,如“short”、“int”、“long”、或“longlong”型数据在相加后达到最大值后,会发生什么情况呢,于是对一个“int”型数据进行了“++”操作的测试,结果如下:
iCount = 2147483645
liCount = 2147483646
liCount = 2147483647
liCount = -2147483648
liCount = -2147483647
liCount = -2147483646
可见其数据的达到最大后,变成了最大绝对值的负数;通过上述测试判断,如果只想使用其大于0的有符合类型数据,需要自己加以保护了。
最后,我还测试了一下Linux平台的情况,数据溢出后的情况是完全一致的;另外这种情况叫什么呢,我没有查到,只能暂时称为“回环”,希望得到大家的批评指正。
注意:Int类型溢出太大会从负数变成正数