一、计算机数据表示的形式
1.1数值型数据
二进制:由0、1组成,逢2进1.
八进制:由0~7组成,逢8进1 进制特点:0开头,例如023、011
十进制:由0~9组成,逢10进1
十六进制:由0~9,a~f组成,逢16进1 进制特点:0x开头,例如0x64、0xac
1.2 进制转换
1.2.1 十进制转二进制
(1)短除法
例如十进制的12转换为二进制
12/2=6......0
6/2=3......0
3/2=1......1
则转换后的二进制为1100
(2)拆分法
例如十进制12转换为二进制
可以拆分为2³+2²其余次方数为0,则转换为二进制为1100
1.2.2 二进制转八进制
在转换时由右向左,每三位二进制数表示一位八进制数
例如:100110010转换为八进制:100 110 010——>462
1.2.3八进制转二进制
在转换时,一位八进制数转换为三位二进制数
例如:0236——>010 011 110
1.2.4十六进制转二进制
在转换时,以为十六进制数转换为4位二进制数
例如:0xcf——>1100 1111
二、非数值型数据
对于非数值型的运算,通常指的是对其ASCII码进行运算,每个字符都有对应的ASCII码,单个字符用' ' 包裹。
常见的字符以及对应ASCII码
'/0' ASCII码为0,表示字符串的结束。
'/n' ASCII码为10,表示换行。
' '(空格)ASCII码为32,表示一个空格。
'0' ASCII码为48。
'A' ASCII码为65。
'a' ASCII码为97。
例如:printf("%c/n",'A');
printf("%c/n",'A+32');
则分别会输出A和a。(A与a之间的ASCII码相差32)
三、词发符号
3.1关键字
存储类型:auto(自动变量)、static(只作用于本文件或函数中,在不同文件或函数中可重复定义同名变量)、register(寄存器变量)、extern(外部类变量声明)
数据类型:int char float short long double signed unsigned
构造数据类型:struct enum union
分支:if else switch case default for do while go to break continue
其他:void const sizeof volatile return typedef
3.2 标识符
标识符的命名规则:
(1)由数字、字符、下划线组成
(2)开头不能是数字
(3)不能与关键字重名
(4)名字简明易懂
3.3 运算符
3.3.1 算术运算符:+ - * / % ++ --
/ 整数相除,向下取整
例如:
int a=9/2;
printf("%d\n",a);//4
float a=9/2;
printf("%f\n",a);//4.000000 //默认打印小数点后六位
注意:
float a=4;
printf("%f\n",a);//4.000000
float a=9.0/2;
printf("%f\n",a);//4.500000
强制转换:(数据类型)
int b=9;
float a=(float)b/2; //强制转换只在当前这一行生效
printf("%f\n",a);//4.500000
%:取余,只能用于整数运算。
例如:9/4=2......1 9%4==1
++:本体=本体+1
例如:a++;//a=a+1
1)++b; //b=b+1;
printf("%d\n",b); //10
2)b++; printf("%d\n",b); //10
2、赋值语句
int b=9;
1)、int c=++b; //先b=b+1在赋值
printf("%d %d\n",b,c);//10 10
2)、int c=b++; //先赋值再b=b+1
printf("%d %d\n",b,c);//10 9
补充:
int b=9;
int c=(b++); //先赋值再b=b+1
printf("%d %d\n",b,c);//10 9
3、打印语句
int b=9;
1)、printf("%d\n",++b);//10
printf("%d\n",b);//10
2)、printf("%d\n",b++);//9
printf("%d\n",b);//10
3.3.2 逻辑运算符:&& || !
&&逻辑与:全真则真,一假全假。
||逻辑或:一真全真,全假才假。
!逻辑非:真变假,假变真。
阶段法则:在逻辑与运算中,前边表达式为假,后边表达式不再执行,直接返回假。
在逻辑或运算中,前边表达式为真,后边表达式不再执行,直接返回真。
3.3.3 位运算符:& | ^ ~ << >>(后两个应用于进制)
&位与:全一则一,有零则零。
|位或:有一则一,全零则零。
^异或:相同为0,不同为1。
~取反:1-->0 0--->1。
(1)交换两个数值
int a=12,b=10;
//方法一:
// int temp=0;
// temp=a;
// a=b;
// b=temp;
//方法二:
a=a^b; //1100 ^ 1010 == 110==a
b=a^b; //110 ^ 1010 == 1100==b=12
a=a^b; //110 ^ 1100 == 1010==a=10
printf("%d %d\n",a,b);//10 12
return 0;
(2)关于原码、反码、补码
在计算机中整数以补码的形式存在
正数的原码、反码、补码均相同。负数的反码为原码除第一位符号位,其余按位取反得出,补码为反码+1。
int 4字节 1字节=8位 32位 最左边是符号位,0正数 1负数
-10:1000 0000 0000 0000 0000 0000 0000 1010
int a = 12, b = -10;
int c = a & b;
printf("%d\n", c); // 4
12补码:
0000 0000 0000 0000 0000 0000 0000 1100
-10原码:
1000 0000 0000 0000 0000 0000 0000 1010
-10反码:
1111 1111 1111 1111 1111 1111 1111 0101
-10补码:
1111 1111 1111 1111 1111 1111 1111 0110
12补码 & -10补码
0000 0000 0000 0000 0000 0000 0000 1100
1111 1111 1111 1111 1111 1111 1111 0110
0000 0000 0000 0000 0000 0000 0000 0100 补码==4
int b = 10;
int c = ~b;
printf("%d\n", c); // -11
10补码:
0000 0000 0000 0000 0000 0000 0000 1010
~:补码
1111 1111 1111 1111 1111 1111 1111 0101
反码:
1111 1111 1111 1111 1111 1111 1111 0100
原码:
1000 0000 0000 0000 0000 0000 0000 1011----》-11
(3)<< 左移符号:左移几位,右边补几个0。
>> 右移符号:右移几位,右边舍弃几位。
(4)置一公式:A|(1<<n):将数据A的第个数置一,原理是将原本二进制的1向左移n位,即右侧补了n个0,在将其与A进行位或运算(与1或会被置1)。
置0公式:A&(~(1<<n))同理,和零与会被清0。
3.3.4 三目运算符
表达式1?表达式2:表达式3
运算顺序:
若<表达式1>的值为真,则执行<表达式2>
若<表达式1>的值为假,则执行<表达式3>
3.3.5 运算符优先级
单算移关与 异或逻条赋
单目运算符:++ -- ! ~
算术运算符:* / % + -
移位运算符:<< >>
关系运算符:> >= < <= == !=
位与运算符:&
异或运算符:^
位或运算符:|
逻辑运算符:&& ||
条件运算符:?:
赋值运算符:= += -= *= /= %=