C语言的数据类型
C语言的数据类型
一、常量:
程序中不可变化的量
1、整型常量:
1)
#define:
宏常量
#define MAX 10
1 #include <stdio.h> 2 3 #define MAX 10 4 5 int main(){ 6 printf("%d\n",10); 7 printf("%d\n",MAX); 8 return 0; 9 }
2)const
const常量
1 #include <stdio.h> 2 3 #define MAX 10 4 5 int main(){ 6 printf("%d\n",10); 7 printf("%d\n",MAX); 8 const a = 1; 9 printf("%d\n",a); 10 return 0; 11 }
3)整数常量一共两类:宏常量和const常量
2、字符串常量:
1)
#define STRING "hello world\n"
1 #include <stdio.h> 2 3 #define MAX 10 4 #define STRING "hello wprld\n" 5 6 int main(){ 7 printf("%d\n",10); 8 printf("%d\n",MAX); 9 const a = 1; 10 printf("%d\n",a); 11 printf(STRING); 12 return 0; 13 } 14 ~
2)const字符串常量:
1 #include <stdio.h> 2 3 #define MAX 10 4 #define STRING "hello wprld\n" 5 6 int main(){ 7 printf("%d\n",10); 8 printf("%d\n",MAX); 9 10 const a = 1; 11 printf("%d\n",a); 12 13 printf(STRING); 14 15 const char *str = "hello"; 16 17 printf(str); 18 19 return 0; 20 }
PS:define 大写,const小写
二、变量:
程序中可变化的量
三、二进制数、位、字节、字、进制:
1、位:一个位只能表示0或1,简称bit
2、字节:一个字节为8位,8个二进制,简称BYTE
3、字:一个字为两个字节,简称word。
4、进制:C中
10进制:不加
16进制:0x
8进制:0
1 ubuntu@ubuntu:~/c_demo$ vi 1.c 2 ubuntu@ubuntu:~/c_demo$ gcc -o 1 1.c 3 ubuntu@ubuntu:~/c_demo$ ./1 4 64 5 256 6 ubuntu@ubuntu:~/c_demo$ cat 1.c 7 #include <stdio.h> 8 9 int main(){ 10 printf("%d\n",0100); 11 printf("%d\n",0x100); 12 return 0; 13 } 14 ubuntu@ubuntu:~/c_demo$
四、原码、反码与补码:
1、原码:
将最高位作为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值。
+7的原码:00000111
-7的原码:10000111
2、反码:
一个数如果值为正,那么反码和原码相同。
一个数如果值为负,符号位为1,其他各位与原码相反。
+7的反码:00000111
-7的反码:111111000
3、补码:
1)原码和反码都不利于计算机的运算,如原码表示的+7和-7相加,还需要判断符号位。
2)正数的补码:原码、反码、补码都相同
+7的补码:00000111
3)负数的补码:最高位为1,其余各位原码取反,最后对整个数+1。
-7的补码:111111001
五、sizeof:
sizeof是C语言关键字,功能是求指定数据类型在内存中的大小,挡位是字节。
一个整数在32位系统下是4个字节。一个整数,最大可以存放2的32的次方-1个字节
1 ubuntu@ubuntu:~/c_demo$ ./1 2 4 3 ubuntu@ubuntu:~/c_demo$ cat 1.c 4 #include <stdio.h> 5 6 int main(){ 7 printf("%d\n",sizeof(10)); 8 return 0; 9 } 10 ubuntu@ubuntu:~/c_demo$
六、printf输出
1、输出一个有符号的10进制整数 %d
2、输出一个无符号的10进制整数 %u
3、输出一个十六进制的数 %x
4、输出大写的ige十六进制的数 %X
5、输出八进制的数 %o
6、输出一个内存地址 %p
7、输出一个字符(不是整数) %c
七、short long unsigned int
1、short是短整数 32位系统中是2字节
2、long 长整数 32位系统中是4字节,windows,linux\unix(8)
3、int 4个字节
4、Long long 64位中8个字节
5、unsigned 关键字是代码无符号数 如 unsigned int ,无符号数都是正数。
八、整数溢出:
计算一个整数的时候,超出整数能够容纳的最大单位后,整数会溢出。溢出的结果是高位舍弃。
1 ubuntu@ubuntu:~/c_demo$ cat 1.c 2 #include <stdio.h> 3 4 int main(){ 5 unsigned short a = 0xffff; 6 a = a+1; 7 printf("%d\n",a); 8 return 0; 9 } 10 ubuntu@ubuntu:~/c_demo$ ./1 11 0 12 ubuntu@ubuntu:~/c_demo$
九、大端和小端:
对于intel的x86架构的复杂指令CPU,整数在内存中是倒着存放的,低地址放低位,高地址放高位,小端对齐。
但对于Unix服务器,大端对齐。
十、char类型
1 ubuntu@ubuntu:~/c_demo$ ./2 2 a 3 1 4 ubuntu@ubuntu:~/c_demo$ cat 2.c 5 #include <stdio.h> 6 int main(){ 7 char c; 8 c = 'a'; 9 printf("%c\n",c); 10 printf("%d\n",sizeof(c)); 11 return 0; 12 } 13 ubuntu@ubuntu:~/c_demo$