C语言基础与提高
基本数据类型的字节
整型 int 4个字节
单精度浮点型float 4个字节
双精度浮点型 double 8个字节
字符型char 1个字节
长整型 long 4个字节 8个字节(64位)
短整型 short 2个字节
sizeof() 不是函数,是一个运算符
例1:下面这段代码的结果是什么?
int main()
{
chara[1000];
inti;
for(i= 0; i < 1000; i++)
{
a[i]= -1-i;
}
printf(“%d\n”,strlen(a));
return0;
}
分析:
char 的字节长度为8,最小负数为 1000 0000,为-128
a[0]=-1, a[1]=-2, … a[127]=-128
a[128]=-129,超出了char所能表示的最小负数,所以a[128] != -129,
-129的原码:1 1000 0001,假设能储存于内存中,则以补码储存。
-129的补码:1 0111 1111,事实上最高位的1无法储存,故内存中储存的数据为:
0111 1111,即127的补码,故a[128] = 127。
a[129]=-130,同理,输出的实际值 a[129]=126
故有a[255]=0.
而函数strlen()遇到字符‘\0’就会停止,输出计数的值为255。(从i=0,计数到i=254,共计255个)
例2:
inti = -20;
unsignedint j = 10;
i+ j = ?
分析:
i是有符号整型,j是无符号整型,
i中-20的原码:00000000 00000000 00000000 10010100
i中-20的补码:11111111 11111111 11111111 11101100
j中10的原码:00000000 00000000 00000000 00001010
j中10的补码:00000000 00000000 00000000 00001010
两者补码之和:11111111 11111111 11111111 11110110
值为:4294967286
const 修饰一个只读变量,不能通过变量的值去修改对应内存中的数据,但是可以通过地址(指针)去修改。
volatile 防止编译时被优化,针对硬件编程时。
字符串默认含有\0
字符串用“”包住
“a”也是一个字符串,等价于“a\0”
强制类型转换 :(类型)表达式
条件运算符 max = (a > b) ? a : b;
运算符的优先级可以使用()来解决。
逗号运算符:连接两个表达式
自增、自减运算
例:
int a =4
(1)、a+=a++;
(2)、a+=++a;
(3)、++a+=a;
(4)、++a+=a++;
(5)、++a+=++a;
答:
(1) a = a + a++ = 8
a++;
a=9;
(2) a = a + ++a = 10
(3) ++a;
a = a + a = 10;
(4) ++a;
a = a + a =10
a++;
a=11
(5) 12
switch语句
例:简单的计算器
1#include <stdio.h>
2
3int main()
4 {
5 int num1, num2;
6 char opt;
7
8 printf("Pleaseinput:\n");
9 scanf("%d%c%d",&num1,&opt,&num2);
10
11
12 switch (opt)
13 {
14 case '+': printf("result = %d\n", num1 + num2); break;
15 case '-': printf("result = %d\n", num1 - num2); break;
16 case '*': printf("result = %d\n", num1 * num2); break;
17 case '/': printf("result = %d\n", num1 / num2); break;
18 default: printf("UNKNOW\n");
19 }
20
21 return 0;
22 }