目录:
一、进制转换
1 进制转换是人们利用符号来计数的方法,包含有多种数据转换,进制转换由一组数码符号和两个基本因素(位与权),进制包括二进制、十进制、十进制。
2 二进制和十进制
位与权:
9 3位
10 1权
整数93在二进制在一个字节中的二进制存储方式
0 1 0 1 1 1 0 1位
128 64 32 16 8 4 2 1权
零和正数:符号位为最高位值为0
二进制转换为十进制:一位加权,零位不见
01011101 = 1 + 4 + 8 + 16 + 64 = 2^0 + 2^2 + 2^3 + 2^4 + 2^6 = 93
01101101 = 1 + 4 + 8 + 32 + 64 = 2^0 + 2^2 + 2^3 + 2^5 + 2^6 = 109
十进制转换为二进制:有权添1,无权补0
93 = 0101 1101
93-64=29-16=13-8=5-4=1-1=0
练习:
1 107十进制数转换成二进制 0110 1011
107-64=43-32=11-8=3-2=1-1=0
2 0110 0111二进制数转换成十进制
1 + 2 +4 +32 +64 = 103
3 十进制54,十转二,二转十
54-32=22-16=6-4=2-2=0 0011 0110
0011 0110 = 2+4+16+32=54
4 克里斯-波什 球衣号码1 下面是什么? winning
W 01110111 I 01101001 N 01101110
N 01101110 I 01101001 N 01101110
G 01100111
1+2+4+16+32+64=119 W
1+8+32+64=105 I
2+4+8+32+64=110 N
1+2+4+32+64=103 G
二、常量
1 常量就是不可改变的值
1.
int数值 代表的数据类型
3 int
3L long int
3LL long long int
3u unsigned int
3ul unsigned long
2.
float数值 代表的数据类型
3.5 double
3.5f float
3.5F long double
三、sizeof(参数)
计算出数据所占内存空间大小,以字节为单位。
参数可以是类型、变量和表达式,但sizeof()不负责计算表达式的值,只关注类型。
sizeof()的占位符是%ld
1 #include <stdio.h> 2 3 int main() 4 { 5 char ch; 6 int i; 7 long int i2 = 8L; 8 int i3 = 10; 9 printf("字符ch的存储空间是:%ld ",sizeof(ch)); 10 printf("变量i的存储空间是:%ld ",sizeof(i)); 11 printf("数值8的存储空间是:%ld ",sizeof(8)); 12 printf("数值8L的存储空间是:%ld ",sizeof(8L)); 13 printf("变量i2的存储空间是:%ld ",sizeof(i2)); 14 //sizeof不负责运算 15 printf("变量i3=4的存储空间是:%ld ",sizeof(i3=4)); 16 printf("i3的值不变:%d ",i3); 17 return 0; 18 }
四、运算符
c语言的一个特点是它更强调表达式而不是语句,表达式是表示如何计算值的公式,最简单的表达式是常量和变量,变量表示程序运行的时候需要计算的值,常量表示不变的值,更加复杂的表达式把运算符用作操作数。
1 算术运算符: + - * /求商 %取余
/ 整数相除,取整数部分
/和%都不能对0操作,否则中断程序,但/0.0允许,inf是无穷大
%只能用于整数,浮点数补支持
/向0整除(取更靠近0的数),运算时跟数学是一样的
%符号与%前面的数字符号相同,取余跟数学不一样没只能%前面的匹配
scanf("%*c") 清除缓存
练习:
1.从键盘输入一个秒数,输出几小时几分钟几秒,比如:3666秒,得到1小时1分钟6秒
1 #include <stdio.h> 2 //从键盘输入一个秒数,输出几小时几分钟几秒,比如:3666秒,得到1小时1分钟6秒 3 int main() 4 { 5 int miao; 6 printf("请输入一个秒数: "); 7 scanf("%d",&miao); 8 int h = miao/3600; 9 int m = miao%3600/60; 10 int s = miao%60;//miao%3600%60 11 printf("%d小时%d分钟%d秒 ",h,m,s); 12 return 0; 13 }
2 输入一个数,固定长度是三位数,输入123,输出结果倒置:321
1 #include <stdio.h> 2 //输入一个数,固定长度是三位数,输入123,输出结果倒置:321 3 int main() 4 { 5 int i; 6 printf("请输入一个数:"); 7 scanf("%d",&i); 8 int r1 = i / 100;//1 9 int r2 = i % 100 / 10;//2 10 int r3 = i % 10;//3 11 //int r = r3 * 100 + r2 * 10 + r1; 12 //printf("倒置数是:%d ",r); 13 printf("倒置数是:%d%d%d ",r3,r2,r1); 14 return 0; 15 }
五、赋值运算符=
把等号右边的值付给左边的变量,从右向左
int i = 10;
int j = 20,k = 30;
i = j = k = 6;//不推荐
k = 6;
j = k;
i = j;
1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 10; 6 int j = 20,k = 30; 7 i = j = k = 6; 8 printf("i:%d,j:%d,k:%d ",i,j,k); 9 //int 10 = x;错误 10 //i + j =10;错误 11 printf("i=10:%d ",i=10);//表达式i=10的值也是10 12 return 0; 13 }
左边必须是一个左值(变量),不能是常数,也不能是表达式。
=赋值 ==相等
符合赋值:
i+=3 -> i=i+3
i-=3 -> i=i-3
i*=3 -> i=i*3
i/=3 -> i=i/3
i%=3 -> i=i%3
六、自增、自减运算符
++、--:变量自增自减,只能用于变量,不能用于常量或表达式或其他。
可以用于整型变量 int/short/long、浮点型 float/double和字符型char.
一般只用于整型。
++i 先自增,在运算
i++ 先运算,在自增
i,i++,==i,从内存上说是同块内存
在同一个表达式中不要对同一个变量多次进行自增自减操作,难道加大,代码变的不可读。
1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 10; 6 int j = 20; 7 i++; 8 j--; 9 printf("i的值:%d ",i); 10 printf("j的值:%d ",j); 11 int k = 0; 12 int l = 10; 13 //k = l++;//后缀表达式,先赋值在自增 14 //k = ++l;//前缀表达式,先自增在赋值 15 //k = ++l + l++; 16 //k = l++ + ++l; 17 printf("k的值:%d ",k); 18 printf("l的值:%d ",l); 19 return 0; 20 }
七、关系运算符
1 主要用来表示两个或多个数、变量、表达式之间的关系、在c语言中,关系运算符和数学上的<、>、>=、<=、一样,==等于、!=不等于,表达式产生的结果,1代表成立,0代表不成立。
2 关系运算符也可以用于比较整数和浮点数,也允许混合类型操作数。
1 #include <stdio.h> 2 3 int main() 4 { 5 int num1 = 20; 6 int num2 = 15; 7 printf("num1>num2:%d ",num1>num2); 8 //printf("num1=num2:%d ",num1=num2); 9 printf("num1==num2:%d ",num1==num2); 10 printf("num1!=num2:%d ",num1!=num2); 11 return 0; 12 }
八、逻辑运算符
1 &&与 ||或 !非
通常用来表示表达式间的关系
2 逻辑运算符所产生的结果:0表示补成立 1表示成立
当操作数处理结果不是1 或者0时,逻辑运算符将非0操作数作为真值处理。1真 0假 非0真
3 表达式1 &&(且) 表达式2 结果为:
真 && 真,结果为真
真 && 假,结果为假
总结:只要有一个为假,结果就为假。都为真时,才为真。
4 表达式1 || 表达式2 结果为:
真 || 真,结果为真
真 || 假,结果为真
总结:只要有一个为真,结果就为真。都为假时,才为假。
5 非表达式 !表达式1
表达式1 !表达式1
真 假
假 真
1 #include <stdio.h> 2 3 int main() 4 { 5 int num1 = 20; 6 int num2 = 15; 7 int num3 = 30; 8 int num4 = 35; 9 //&& 逻辑与表达式 10 printf("(num1>num2)&&(num3>num4):%d ",(num1>num2)&&(num3>num4)); 11 printf("(num1>num2)&&(num3<num4):%d ",(num1>num2)&&(num3<num4)); 12 //逻辑或表达式 13 printf("(num1>num2)||(num3>num4):%d ",(num1>num2)||(num3>num4)); 14 printf("(num1>num2)||(num3<num4):%d ",(num1>num2)||(num3<num4)); 15 printf("(num1>num2):%d ",num1>num2); 16 //非表达式,取反 17 printf("!(num1>num2):%d ",!(num1>num2)); 18 //逻辑运算符 短路与 num3=10 并没有执行 19 printf("(num1<num2)&&(num3=10):%d ",(num1<num2)&&(num3=10)); 20 printf("num3:%d ",num3); 21 //逻辑运算符 短路或 num3=15 并没有执行 22 printf("(num1>num2)||(num3=15):%d ",(num1>num2)||(num3=15)); 23 printf("num3:%d ",num3); 24 return 0; 25 }
6 短路运算
短路与:若第一个表达式1为假,后面的表达式不在执行,
短路或:若第一个表达式1为真,后面的表达式不在执行,
九、取址运算符& 寻址运算符*
1 在变量前加上&,得到变量在内存中的地址,内存会被划分成以字节为单位,一块一块的空间,没一个空间都有唯一的标识,就是内存地址。
2 在地址前使用*寻址符号,得到该地址保存的数据,值
1 #include <stdio.h> 2 3 int main() 4 { 5 int i =10; 6 printf("i的地址:%p ",&i); 7 //通过*号 根据内存地址 找到内存中的值 8 printf("i的值:%d ",*&i); 9 return 0; 10 }
ASC码表字符查值码:
1 #include <stdio.h> 2 3 int main() 4 { 5 char ch; 6 int i = 0; 7 printf("请输入要查询的字符: "); 8 scanf("%c",&ch); 9 printf("%c对应的数值是:%d ",ch,ch); 10 for (i; i <= 127; i++) { 11 scanf("%*c%c",&ch); 12 printf("%c对应的数值是:%d ",ch,ch); 13 } 14 return 0; 15 }
ASC码表值查字符码:
1 #include <stdio.h> 2 3 int main() 4 { 5 char ch; 6 int d; 7 int i = 0; 8 printf("请输入要查询的数值: "); 9 scanf("%d",&d); 10 printf("%d对应的字符是:%c ",d,d); 11 for (i; i <= 127; i++) { 12 scanf("%*c%d",&d); 13 printf("%d对应的字符是:%c ",d,d); 14 } 15 return 0; 16 }