c语言为何int会爆

Python015

c语言为何int会爆,第1张

数值大于32767。c语言int溢出会导致int被爆掉,因为cint()如果数值大于32767或是小于-32768就会提示溢出了。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。

符号int型数据的取值范围是-32768~32767,2个字节总共16位,第一位为符号位,正数的话第一位为0,负数则为1,整数的取值最大是第一位为0,其后的十五位全为1,算过来也就是32767,如果如题所说,加上1之后,第一位变为1,其余十五位全为0,转换一下,其十进制数据就是2的15此方,因为第一位为1,为负数,所以结果为-的2的15此方,也就是-32768~~~

C语言的整型溢出,分为无符号整型溢出和有符号整型溢出。

对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned

char(1字符,8bits)溢出了,会把溢出的值与256求模。如:

1.unsigned

char

x

=

0xff

2.printf("%dn",

++x)

上面的代码会输出:0

(因为0xff

+

1是256,与2^8求模后就是0)

对于signed整型的溢出,C的规范定义是“undefined

behavior”,也就是说,编译器爱怎么实现就怎么实现。如:

1.signed

char

x

=0x7f

//注:0xff就是-1了,因为最高位是1也就是负数了

2.printf("%dn",

++x)

上面的代码会输出:-128,因为0x7f

+

0×01得到0×80,也就是二进制的1000

0000,符号位为1,负数,后面为全0,就是负的最小数,即-128。