预备知识
1、标准输入/输出
(1) 输入格式说明
格式说明 表示内容
%d int
%ld long
%lld long long
%f float
%lf double
%% 输出一个百分号
%c char
%s 字符串
%o 八进制
%#o 带前导的八进制
%x 十六进制
%#x 带前导的十六进制
scanf("%d%d%*d%d", &a, &b, &c); //跳过输入的第三个数据
int x = 017;
printf("%d", x); //输出15
printf("%o", x); //输出17
printf("%#o", x); //输出017
printf("%x", x); //输出11
printf("%#x", x); //输出0x11
int x = 12, y = 34;
char z = 'a';
printf("%d ", x, y); //一个格式说明,两个输出变量,后面的y不输出
printf("%c", z);# 全排列
(2)数据类型范围
有符号整数类型
类型名称 字节数 取值范围
signed char 1 -2^7(-128) ~ 2^7-1(127)
short 2 -2^15(-32 768) ~ 2^15-1(32 767)
int 4 -2^31(-2 147 483 648) ~ 2^31-1(2 147 483 647)
long 4 -2^31(-2 147 483 648) ~ 2^31-1(2 147 483 647)
long long 8 -2^63(-9.2233720368548e+18) ~ 2^63-1 (9.2233720368548e+18)
无符号整数类型
类型名称 字节数 取值范围
unsigned char 1 0 ~ 2^8(256)
unsigned short 2 0 ~ 2^16(65 536)
unsigned int 4 0 ~ 2^32(4 294 967 296)
unsigned long 4 0 ~ 2^32(4 294 967 296)
unsigned long long 8 0 ~ 2^64(1.844674407371e+19)
浮点类型
类型名称 字节数 取值范围
float 4 -/+3.4e38(精确到6位小数)
double 8 -/+1.7e308(精确到15位小数)
long double 12 -/+1.19e4932(精确到18位小数)
2、文件操作
(1) 重定向
#include <stdio.h>
int main ( )
{
int n, i= 1 , a, m, k;
scanf ( "%d" , & n) ;
freopen ( "in.txt" , "r" , stdin ) ;
freopen ( "out.txt" , "w" , stdout ) ;
. . . . . .
fclose ( stdin ) ;
fclose ( stdout )
return 0 ;
}
3、数组
(1) 二维数组的初始化
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={1,2,3,4,5,}; //合法,后面一个默认为0
int a[2][3]={{1,2,3},{4,5,6}}; //合法,每行三个
int a[2][3]={{1,2,},{4,5,6}}; //合法,第一行最后一个默认为0
int a[2][3]={1,2,3,4,5,6,7}; //不合法,赋值个数多于数组的个数了
int a[][3]={1,2,3,4,5,6}; //合法,可以缺省行的个数
int a[2][]={1,2,3,4,5,6}; //不合法,不可以缺省列的个数
4、位运算
(1) 位运算符
按位与 & :参加运算的两个运算量,如果两个相应的位都为 1,则该位的结果值为 1,否则为 0 按位或 | :参加运算的两个运算量,两个相应的位中有一个为 1,则该位的结果值为 1,否则为 0 异或 ^ : 参加运算的两个运算量,两个相应的位相同,则结果为 0,相异则为 1 取反 ~ : 单目运算符,对一个二进制按位取反,即将 0 变为 1,1 变为 0 左移 << : 将一个数的各二进位全部左移若干位,左边溢出的位舍弃,右补 0 右移 >> : 将一个数的各二进位全部右移若干位,移到右边的低位被舍弃。 对无符号数,左补 0(称为逻辑位移);对负数,左补符号位,即补1(称为算术位移)。
(2) 原码、反码、补码
原码
最高位作为符号位(以0代表正,1代表负) 其余各位代表数值本身的绝对值 表示范围:-127~127 (+0和-0占用两个)
反码
正数反码与原码相同 负数为其绝对值的原码取反 表示范围:-127~127 (+0和-0占用两个)
补码
正数补码与原码相同 负数:对其绝对值的原码取反,然后对整个数加1(若有进位,则被丢弃)(反码 +1 ) 表示范围:-128~127(0的表示方法唯一)