Debug版本和Release版本
Rlease版本会对Debug版本做优化
eg:
int main()
{
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i=0;i<=12;i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
这段代码会在Debug下会进入死循环
在Release版本下不会进入死循环
解析:
在Rlease版本下进行优化,将i的地址放在了arr数组下,就不会进入死循环了
数据类型的基本分类
整型家族:char short int long
浮点型家族:float double
构造类型—自定义类型:
数组
struct 结构体类型
enum 枚举
union 联合体
指针类型:
int * pi
char * pc
float * pf
void * pv
空类型(void):
函数返回类型 void test ();
函数参数 void test (void);
指针 void* p
整形在内存中的存储
原码:直接将二进制按照正负数的形式翻译成二进制就可以。
反码:将原码的符号位不变,其他位依次按位取反就可以得到了。
补码:反码+1就得到补码。
正数的原、反、补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
大小端存储
练习
signed char类型的范围是:-128—127 在八位二进制中把-0当作最小数-128用,也就是10000000
unsigned char类型的范围是:0—255
//1.
//输出什么?
#include <stdio.h>
int main()
{
char a = -1;
signed char b = -1;
unsigned char c = -1;
//11111111111111111111111111111111
// 整形截断
//11111111——c为unsigned char类型原、反、补码相同,为255
printf("a=%d,b=%d,c=%d", a, b, c);//-1 -1 255
return 0;
}
//2.
#include <stdio.h>
int main()
{
char a = -128;
//10000000000000000000000010000000
//整形截断
//10000000
// 以无符号整型打印,发生整形提升
//11111111111111111111111110000000-以无符号整型打印,原、反、补码相同,为4294967168
printf("%u\n", a);//4294967168
return 0;
}
//3.
#include <stdio.h>
int main()
{
char a = 128;
//00000000000000000000000010000000
//整形截断
//10000000
// 以无符号整型打印,发生整形提升
//11111111111111111111111110000000-以无符号整型打印,原、反、补码相同,为4294967168
printf("%u\n", a);//4294967168
return 0;
}
//4.
int main()
{
int i = -20;
//10000000000000000000000000010100-原码
//11111111111111111111111111101011-反码
//11111111111111111111111111101100-补码
unsigned int j = 10;
//00000000000000000000000000001010-原、反、补相同
//i+j
//11111111111111111111111111101100
//00000000000000000000000000001010
//11111111111111111111111111110110-补码
//11111111111111111111111111110101-反码
//10000000000000000000000000001010-原码—— -10
printf("%d\n", i + j);//-10
//按照补码的形式进行运算,最后格式化成为有符号整数
return 0;
}