整数溢出
整数溢出的原理:
1.整数类型限制:
在计算机中,整数类型(如 int, short, long 等)都有固定的位宽(如 8 位、16 位、32 位、64 位等),这些位宽决定了整数能表示的最大值和最小值。
例如,对于一个 32 位有符号整数,其取值范围是 -2,147,483,648 到 2,147,483,647。
-
溢出情况:
1.正溢出:当结果值超过最大正整数时,会发生正溢出。例如,在 32 位有符号整数中,2,147,483,647 + 1 会导致结果变为 -2,147,483,648(环绕回最小 负数)。
2.负溢出:当结果值低于最小负整数时,会发生负溢出。例如,在 32 位有符号整数中,-2,147,483,648 - 1 会导致结果变为 2,147,483,647(环绕回最大正数)。 -
操作示例:
假设我们有一个 8 位有符号整数,范围是 -128 到 127。
如果我们执行 127 + 1,结果应该是 128,但超出了 8 位整数的范围,因此实际结果会变为 -128(即发生正溢出)。
类似地,如果执行 -128 - 1,结果应该是 -129,但同样超出了范围,因此实际结果会变为 127(即发生负溢出)。
各种数据类型对应的取值范围:
uint8 - 0-255
uint16 - 0-65535
uint32 - 0-4294967295
uint36 - 0-18446744073709551615
int8 - -127-128
int16 - -32768-32767
int32 - -2147483648-2147483647
int64 - -9223372036854775808-9223372036854775807
评论