溢出和大小端

在IOS开发的过程中,溢出会在解决问题中遇到,但是大小端一般不会遇到,最近也是研究了一下分享给大家

溢出
一、概念:
数据类型超过了计算机字长的界限而出现的数据溢出,也就是说当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时 ,就存在溢出现象.
二、代码示例:

#include 
int main(void) {
    short var_s=32767;
    var_s++;
    printf("var_s+1=%d\n",var_s++);
    return 0;
}

三、日志打印:

var_s+1=-32768
Program ended with exit code: 0

四、原因分析:
短整型short int存储空间是2个字节,16位,有效范围:-215~215-1,即-32768~32767,当var_s加1后就无法保证内存空间足够大去存储,所以结果不会是32768.

大小端
一、概念:
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由低到高增加,而数据从高位往低位放。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
二、代码示例:

#include 
int main(void) {
    short var_s=0x1234;
    unsigned char *var_p;
    var_p=&var_s;
    printf("var_p content is %p\n",var_p);
    printf("var_p+1 content is %p\n",var_p+1);
    printf("*var_p= %d\n",*var_p);
    printf("*(var_p+1)= %d\n",*(var_p+1));
    return 0;
}

三、日志打印:

var_p content is 0x7fff5fbff7ca
var_p+1 content is 0x7fff5fbff7cb
*var_p=52//0x34
*(var_p+1) =18//0x12
Program ended with exit code: 0

四、图例说明:

溢出和大小端_第1张图片
大小端.png

注:编译器不同可能大小端的存储方式也不同,也就是说在这台电脑试验是大端,可能在别的电脑试验出小端存储

你可能感兴趣的:(溢出和大小端)