C语言 -数据类型
1、数据:数据类型、变量、常量
- 字符型:char 1字节
- 整型:int 4字节 最高位为符号位 unsigned int 所有位都是数据位
- 短整型:short int(short) 2字节
- 长整型:long int(long) 8字节
- 浮点型:float 4字节
- 双精度型:double
8字节
数据类型的本质:通过所占内存大小来决定
sizeof()是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
1 字节=8 bit
int 32位:无符号数:0 - 2^32-1
有符号数:-2^31 - 2^31-1
chart 8位:-128 - 127
类型转换-高位丢失
所有数据在计算机内存储的形式都是补码形式
1001 原码
1110 反码:符号位不参与取反
1111 补码:反码加一,符号为参与计算
正数原码,反码,补码都是本身
1 #include<stdio.h>
2 int main()
3 {
4 int a = 129;
5 char b = a;
6 print("b=%d\n",b);
7 }
运行结果为b=-127
int:1000 0001(129)
char:1000 0001 补码
1111 1110 反码
1111 1111 原码 (-127)
易错点 0的原码:1000 0000;0000 0000
1 #include<stdio.h>
2 int main()
3 {
4 int a = 128;
5 char b = a;
6 print("b=%d\n",b);
7 }
结果:
jsetc@jsetc-virtual-machine:~/0123$ vim 1.c
jsetc@jsetc-virtual-machine:~/0123$ gcc 1.c
jsetc@jsetc-virtual-machine:~/0123$ ./a.out
b=-128
jsetc@jsetc-virtual-machine:~/0123$
int a :1000 0000
char b:1000 0000 补码
1111 1111 反码
人为规定0000 0000 原码 (-128)
char字符以acs表形式进行输出;
常用ACS值记录:
- ‘A’-65
- ‘a’-97
- ‘0’-32
const
常量定义,由它修饰的变量不能进行修改
printf:
- %d:十进制数据
- %u:无符号十进制数据
- %f:6位小数
- %c:输出单个字符
- %s:输出字符串
printf()
2 int main()
3 {
4 char *str = "hello";
5 printf("|%7s|\n",str);
6 printf("|%-7s|\n",str);
7 printf("|%.2s|\n",str);
8 printf("|%7.2s|\n",str);
9 printf("|%-7.2s|\n",str);
10 printf("|%-2.7s|\n",str);
11
12 double d =10.2;
13 printf("|%f|\n",d);
14 printf("|%-10.2f|\n",d);
15
16 int a = 10;
17 printf("|%d|\n",a);
18 printf("|%5d|\n",a);
19 printf("|%+5d|\n",a);
20 printf("|-%-5d|\n",a);
21 printf("|%-5d|\n",a);
22
23 return 0;
24 }
结果:
jsetc@jsetc-virtual-machine:~/0123$ ./a.out
| hello|
|hello |
|he|
| he|
|he |
|hello|
|10.200000|
|10.20 |
|10|
| 10|
| +10|
|-10 |
|10 |
%-d:表示左对齐
%7.2d:表示占用7个字节,但只输出2个字节
scanf
:严格按照“ 输入格式”进行数据输入
数据暂时存放在缓冲区
1 #include<stdio.h>
2 int main()
3 {
4 int a,b,c;
5 // scanf("%d%d%d",&a,&b,&c);/*结果1
6 scanf("%d%d%d\n",&a,&b,&c);/*结果2
7 printf("%d %d %d",a,b,c);
8 return 0;
9 }
结果1:
12 13 14
12 13 14
结果2:
12 13 14 312231
12 13 14
结果2所用scanf()语句需要再输入一个无效数字,按下回车。
将双引号中的\n挤出数据缓冲区域,才能完成输出
运算符
单目运算符,双目运算符,三目运算符
算术运算符:+ - * /
逻辑运算符:&& 、||、^ 、==、!
条件表达式:<表达式1>?<表达式2>:<表达式3>
赋值顺序:从右到左。
其他运算符:从左往右
逻辑运算具有短路作用:当左边条件一定满足或一定不满足的时候,不进行右边的运算。
逻辑运算符&&短路了++b的运算码片
1 #include<stdio.h>
2 int main()
3 {
4 int a=0;
5 int b=0;
6 int c=1;
7 int d=0;
8 d=a++&&++b||c++;
9 printf("a=%d\n",a);
10 printf("b=%d\n",b);
11 printf("c=%d\n",c);
12 printf("d=%d\n",d);
13 }
结果
a=1
b=0
c=2
d=1
逻辑运算符||短路了c++的运算
1 #include<stdio.h>
2 int main()
3 {
4 int a=-1;
5 int b=0;
6 int c=1;
7 int d=0;
8 d=a++&&++b||c++;
9 printf("a=%d\n",a);
10 printf("b=%d\n",b);
11 printf("c=%d\n",c);
12 printf("d=%d\n",d);
13 }
结果
a=0
b=1
c=1
d=1