()、 []、 -> 、 .、 !、 ++、 -- |
圆括号、方括号、指针、成员、逻辑非、自加、自减 |
++ 、 -- 、 * 、 & 、 ~ 、 ! 、 + 、 - 、 sizeof、(cast) |
单目运算符 |
* 、 / 、 % |
算术运算符 |
+ 、 - |
算术运算符 |
<< 、 >> |
位运算符 |
< 、 <= 、 > 、 >= |
关系运算符 |
== 、 != |
关系运算符号 |
& |
位与 |
^ |
位异或 |
| |
位或 |
&& |
逻辑与 |
|| |
逻辑或 |
? 、 : |
条件运算符 |
= 、 += 、 -= 、 *= 、 /= 、 %= 、 &= 、 |= 、 ^= |
赋值运算符 |
, |
顺序运算符 |
数据类型
基础数据类型
注意:以下是典型的数据位长和范围。编译器可能使用不同的数据位长和范围。
关键字 |
位长(字节) |
范围 |
格式化字符串 |
char |
1 |
-128..127(或0..255,与体系结构相关) |
%c |
unsigned char |
1 |
0..255 |
%c, %hhu |
signed char |
1 |
-128..127 |
%c, %hhd, %hhi |
int |
2(16位系统) 或 4 |
-32768..32767 或 -2147483648..2147483647 |
%i, %d |
unsigned int |
2 或 4 |
0..65535 或 0..4294967295 |
%u |
signed int |
2 或 4 |
-32768..32767 或 -2147483648..2147483647 |
%i, %d |
short int |
2 |
-32768..32767 |
%hi, %hd |
unsigned short |
2 |
0..65535 |
%hu |
signed short |
2 |
-32768..32767 |
%hi, %hd |
long int |
4 或 8 |
-2147483648..2147483647 或 -9223372036854775808..9223372036854775807 |
%li, %ld |
unsigned long |
4 或 8 |
0..4294967295 或 0..18446744073709551615 |
%lu |
signed long |
4 或 8 |
-2147483648..2147483647 或 -9223372036854775808..9223372036854775807 |
%li, %ld |
long long |
8 |
-9223372036854775808..9223372036854775807 |
%lli, %lld |
unsigned long long |
8 |
0..18446744073709551615 |
%llu |
float |
4 |
3.4x10−38..3.4x10+38 (7 sf) |
%f, %e, %g |
double |
8 |
1.7x10−308..1.7x10+308 (15 sf) |
%lf, %e, %g |
long double |
8 或以上 |
编译器相关 |
%Lf, %Le, %Lg |
数据类型由高到低:
long double
double
float
unsigned long long
long long
usigned long
long
unsigned int
int
各类型数据间混合运算转换
double <— float
^
|
long
^
|
unsigned
^
|
int < — char, short
-
使用终端编译运行c源文件:
E0125:~ knight$ cd /Users/knight/Documents/CCode cd 进入路径
E0125:CCode knight$ ls ls 查看文件
helloworld.c
E0125:CCode knight$ cc -c helloworld.c cc -c 编译,生成 .o 文件
E0125:CCode knight$ cc helloworld.o cc .o 链接
E0125:CCode knight$ ./a.out 生成可执行文件a.out
Hellow ,C!
E0125:CCode knight$
Sizeof( )用法:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 15;
printf("a = %d\n", a << 1);
printf("a = %d\n", a >> 1);
short a1 = 8;
int size = sizeof(a1);
printf("short size = %d byte\n", size);
int a2 = 8;
size = sizeof(a2);
printf("int size = %d byte\n", size);
long a3 = 8;
size = sizeof(a3);
printf("long size = %d byte\n", size);
float a4 = 8;
size = sizeof(a4);
printf("float size = %d byte\n", size);
double a5 =8;
size = sizeof(a5);
printf("double size = %d byte\n", size);
long double a6 = 8;
size = sizeof(a6);
printf("long double size = %d byte\n", size);
char a7 = 'A';
size = sizeof(a7);
printf("char size = %d byte\n", size);
char b[3] = "字";
size = sizeof(b);
printf("Chinese word size = %d byte\n", size);
return 0;
}
运行结果:
a = 30
a = 7
short size = 2 byte
int size = 4 byte
long size = 8 byte
float size = 4 byte
double size = 8 byte
long double size = 16 byte
char size = 1 byte
Chinese word size = 3 byte
Program ended with exit code: 0
作业:
1,2,3,4题略
5.编写一个程序,实现任一人民币金额按最大面值进行拆分,例如: 1999元可以
拆分为19张面值为100元,1张面值为50元,2张面值为20元,1张面值为5元,4张
面值为1元的人民币。 问2883元如何拆分?
#include <stdio.h>
int main(int argc, const char * argv[]) {
int n = 2883;
int a, b, c, d, e , f;
int ar, br, cr, dr , er, fr;
a = n / 100; //a = 28
ar = n % 100; // ar = 83
b = ar / 50; //b = 83 / 50 = 1
br = ar % 50; //br = 33
c = br / 20; //c = 1
cr = br % 20; //cr = 13
d = cr / 10; //d = 1
dr = cr % 10; //dr = 3
e = dr / 5;
er = dr % 5;
f = er / 1;
fr = er % 1;
printf("2883元可以拆分为: \n");
printf("100元面值%d张\n",a);
printf("50元面值%d张\n",b);
printf("20元面值%d张\n",c);
printf("10元面值%d张\n",d);
printf("5元面值%d张\n",e);
printf("1元面值%d张\n",f);
return 0;
}