
举例的话,譬如:
int a = 305419896;
char b = a;
a转换成2进制是:0001 0010 0011 0100 0101 0110 0111 1000 他的16进制是12 34 56 78,
那么b就是a的最后一个byte,即b的二进制表示是0111 1000,16进制是78,十进制是120.
就是这么样的一个转换和截断。
从C语言的内部处理机制来说,int型数超出范围(溢出)被认为是一个正常现象,只会产生错误的计算结果或逻辑错误,而不会触发数据溢出的异常。因此,为了避免因为整数溢出而产生程序逻辑或计算错误,程序员必须自行检测可能出现的溢出或者确保不会出现数据溢出的情况。C语言对于int类型数据超出范围的处理,只有一个最简单的原则:截断处理,即超出int位长度范围的高字节被自动截掉。
比如,假设int长度为16位的情况下,以下代码:
int
a=0X77FFFFL
/*
由于超出范围,高位的77将被自动截掉,实际的a将会等于0xFFFF
*/
++a
/*
a自增后,将超出范围,高位的1被截掉,实际a=0
*/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)