int m = 456; printf("%d%d\n", m, m); printf("%5d%5d\n", m, m); printf("%05d%05d\n", m, m); printf("%-5d%-5d\n", m, m); float n = 3.678; printf("n = %f\n", n); printf("n = %.2f\n", n); return0; }
printf("%d\n", 5 / 2); printf("%lf\n", 5.0 / 2); int a = -8; unsignedint b = 7; if (a + b > 0) { printf("a+b>0\n"); } else { printf("a+b<=0\n"); } int m; float n = 5.8f; m = n; printf("m = %d\n", m); printf("n = %f\n", n); int x = 10; int y = 4; float w; w = (float)x / (float)y; printf("w = %f\n", w);
intmain(int argc, char *argv[]) { int a = 40; int b = 6;
printf("%d + %d = %d\n", a, b, a + b); printf("%d - %d = %d\n", a, b, a - b); printf("%d * %d = %d\n", a, b, a * b); printf("%d / %d = %d\n", a, b, a / b); printf("%d %% %d = %d\n", a, b, a % b);
float m = 10.32; float n = 4.5;
printf("%.4f + %.4f = %.4f\n", m, n, m + n); printf("%.4f - %.4f = %.4f\n", m, n, m - n); printf("%.4f * %.4f = %.4f\n", m, n, m * n); printf("%.4f / %.4f = %.4f\n", m, n, m / n);
return0; }
输出为:
image
关系运算符
>、<、==、>=、<=、!=.
1 2 3 4 5 6 7 8 9 10 11 12
#include<stdio.h>
intmain(int argc, char *argv[]) {
int a = 10 > 5; int b = 10 < 5;
printf("a = %d, b = %d\n", a, b);
return0; }
image
逻辑运算符
&&、||、!.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include<stdio.h>
intmain(int argc, char *argv[]) {
int a = 20; int ret = a > 10 && a < 19; printf("ret = %d\n", ret); ret = a > 10 || a < 19; printf("ret = %d\n", ret);
int b = 100; ret = (a < 19) && (b += 10); printf("b = %d\n", b);
ret = (a > 19) || (b += 10); printf("b = %d\n", b); return0; }
输出为:
image
注意逻辑运算符存在短路现象。
位运算符
&:任何值与 0 得 0,与 1 保持不变
1 2 3
0101 1011 1011 0100 0001 0000
|:任何值或 1 得 1,或 0 保持不变
1 2 3
0101 0011 1011 0100 1111 0111
~:1 变 0,0 变 1
1 2
0101 1101 1010 0010
^:相异得 1,相同得 0
1 2 3
1001 1100 0101 1010 1100 0110
>>:右移
高位溢出,低位补 0
<<:左移
注意右移分:逻辑右移、算数右移。
逻辑右移:高位补 0,低位溢出。
算数右移:高位补符号位,低位溢出。
在一个编译系统中到底是逻辑右移动,还是算数右移,取决于编译器。
1 2 3 4 5 6 7 8 9 10
// 判断右移是逻辑右移还是算数右移 #include<stdio.h>
intmain(int argc, char *argv[]) {
printf("%d\n", -1 >> 3);
return0; } // 如果结果还是‐1 证明是算数右移
输出结果:
image
条件运算符号
语法:
1
(表达式 A) ? (表达式 B) : (表达式 C)
相对于:
1 2 3 4 5
if (A) { B; } else { C; }
例如:
1 2 3 4 5 6 7 8 9 10 11 12
#include<stdio.h>
intmain(int argc, char *argv[]) {
int a = 10, b = 20; int c; c = (a > b) ? (a += 10) : (b += 10); printf("c = %d\n", c); printf("a = %d, b = %d\n", a, b);
return0; }
输出结果:
image
逗号运算符
语法:
1
(表达 A, 表达式 B, 表达式 C, ...)
例如:
1
A = (B, C, D);
先运行表达式 B,再运行表达式 C,最后运行表达式 D,最终变量 A
的值为表达式 D 的值。
1 2 3 4 5 6 7 8 9
#include<stdio.h>
intmain(int argc, char *argv[]) { int a = 10, b = 20; int c; c = (a += 10, b += 10, a += b); printf("a = %d, b = %d, c = %d\n", a, b, c); return0; }
输出结果:
image
自增自减运算符
++、--
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include<stdio.h>
intmain(int argc, char *argv[]) {
int a = 100; int b; b = a++; printf("a = %d, b = %d\n", a, b);
a = 100; b = ++a; printf("a = %d, b = %d\n", a, b);