1.整型
概念:表示整型类型的数据
语法:int a = 123;
整数的存储方式:
原码:正整数是直接使用原码进行存储的,比如100这个正整数,则直接把100转换成二进制直接存储。
100 --> 0000 0000 0000 0000 0000 0000 0110 0100
补码:负数则是使用补码来存储,补码 = 原码的绝对值取反 + 1
取反加1时符号位不变
比如 -100 :
100 --> 1000 0000 0000 0000 0000 0000 0110 0100
取反–> 1111 1111 1111 1111 1111 1111 1001 1011
加1 --> 1111 1111 1111 1111 1111 1111 1001 1100
注意:整型数据在二进制存储时最高位(第31位)表示符号位,如果为1 则表示负数反之则表示正数
整型输出:
int c = 100;
printf("十六进制:%#x\n", c); //0x64
printf("十进制:%d\n", c); //100
printf("八进制:%#o", c); //0144
2.浮点型(实型)
概念:用来表示一个实数的数据类型
浮点数的存储:
注意:
float = 3.14; //浮点数3.14通过以上公式计算得到的二进制码被存放与内存f中
printf("f:%f\n",f); // 使用浮点的计算方法来解析内存f中的值(二进制)
printf("d:%d\n",f); // 直接使用整型的计算方法来直接解析内存f 中的值 (二进制)
//所有的数据都会被转换成二进制进行存储,如果想到的到正确的数据,必须使用正确的理解
//方式(类型),来解析二进制数据。
3.字符类型
char c = 'K';
//1. 申请一片内存并且命名为 c
//2. 确定内存的大小为 char (1字节)
//3. 把字符‘K’的ASCII码值转换为二进制,并存储到该内存中
ASCII表如下:
char c = '1' ;
printf("字符:%c\n",c); // 以字符的形式来解析内存 c 的内容得到 对应的字符 1
printf("整型ASCII值:%d\n",c); //以十进制整型来解析内存c 的内容 ,得到1多对应的ASCII值 49
char k = 'H' ;
printf("%c\n" , k + 1 );
printf("%c\n" , k - 1 ); // 字符实质上是一个单字节的整型,因此支持所有整型的操作
字符串:
字符串的表现形式有两种:数组和指针
数组(可读,可写):(存储)
char s1[] = “Hello”; //使用一个数组来存放字符串 “Hello”
指针(只读):(指向)
char * s2 = “Even”; // 使用一个指针来指向常量字符串
char s1[] = "Hello";
char *s2 = "Even";
printf("%s, %s\n" , s1 , s2 );
4.布尔类型
概念:布尔类型用来表示真/假(非零则真)
真:true 假:false
注意在使用布尔类型是需要包含他的头文件: <stdbool.h>
bool a = 1 ; // 真
bool a = 0 ; // 假
bool a = true // 真
bool a = false // 假
//一般布尔类型的变量,可以用于逻辑判断比如 if / while , 或者用于函数的返回值。
// 布尔类型的大小:
bool a = true ;
printf("sizeof(bool):%ld \n ",sizeof(bool) );
printf("sizeof(a):%ld \n ",sizeof(a) );
printf("sizeof(true):%ld \n ",sizeof(true) );
printf("sizeof(false):%ld \n ",sizeof(false) );
printf("false:%d \n ",false );
printf("true:%d \n ",true );
//运行结果:
sizeof(bool):1
sizeof(a):1
sizeof(true):4
sizeof(false):4
false:0
true:1
5.常量与变量
概念: 不可以被改变的内存,被称为常量,可以被改变的内存则称为变量
int a = 100 ; // a是一个变量, 而 100 则是常量
float f = 3.1415; // f 是一个变量, 而 3.1415 则是常量
char s1[] = "abcdefg" ; // s1 是一个变量 , 而"abcdefg" 则是常量 (字符串常量)
常量类型:
100 : 整型常量
100L : 长整型 long
100LL : 长长整型 long long
100UL : 无符号的长整型 unsigned long
3.14 : 编译器默认升级为双精度浮点型
3.14L : 长的双精度浮点型
'a' : 字符常量
"Hello" : 字符串常量(指针 char * )