-
预科第六天
老师今天讲的内容有点多,需要消化一下,尤其是关于原码反码和补码的内容。有按照之前的笔记练习后面的内容,发现笔记中的代码也有敲错的,只不过不知道怎么改了,只能等后期学到之后再留意一下了。
如果是double型数据进行输入,严格意义上讲需要使用%lf。
scanf中输入回车的作用是代表数据输入完成而且\n会残留在输入缓存流中
17.输入缓存流
scanf会先到输入缓存流中找是否有想要的数据,如果输入缓存流为空或者没有匹配的数据,那么就会等待输入
吸收输入缓存流里面的回车?
1>
char ch;
scanf("%c",&ch);
2>
getchar()
3>
getc(stdin);//stdin表明去这个输入缓存流中拿东西;
getchar和getc都是表明去这个输入缓存流里拿单个字符。
18.getchar和putchar
getchar会先到输入缓存流中找是否有想要的字符型数据,如果输入缓存流为空或者没有匹配的字符型数据,那么就会等待输入。
#include
int main()
{
char ch;
ch=getchar();
putchar(ch);
putchar('\n');
return 0;
}
19.ASCII码表
‘0’:0
' ':32
'0':48
'A':65
'a':97
实际上字符类型的数据就是一个特殊的整数类型。
也就是说字符类型可以转换为整型,整型0~254可以转换为字符类型。
20.数据类型转换
计算机只进行相同类型数据的算术,如果类型不一致,默认从精度低的向精度高的类型转换
精度转换
1>隐式转换:默认是从低精度转到高精度
如果是精度高的转到精度地的,会造成数据丢失
2>强制转换
格式:(数据类型)变量/常量
注意:强制数据类型转换不会更改数据原本的类型
21.运算符
计算机是以二进制的方式进行存储,是以数据的补码形式存储(想一想1+(-1)为什么为0),是以原码形式输出
正号0
负号1
十进制13→二进制:
13/2=6...1
6/2=3...0
3/2=1...1
1/2=0...1
十进制13→二进制:1101
1+(-1)=0
直接计算是错误的:
补码 0000 0001
补码 1000 0001
-----------
补码 1000 0010 =-2
补码 1000 0001
反码 1111 1110
原码 1111 1111
原码 0000 0001
原码 1111 1111
----------
原码 1111 1111
反码 1000 0000
补码 0000 0000 =0
原码:就是数据的二进制形式,最高位为符号位,正号0符号1
反码:正数的反码和原码相同,负数的反码符号位不变,后面的依次取反,0变1,1变0
补码:正数的补码就是原码,负数的补码在反码基础上加1,负数的补码转换为反码时要减1
计算机存储:
原码——反码——补码
计算机输出:
补码——反码——原码
1>算术运算符
+ — × / %
%求余数,左右两边的数据必须是整数
2>位运算符
计算机规定:char数据类型
0的二进制0000 0000
-128的二进制1000 0000
char精确表示范围-128~127,char最大表示范围255,char ch=255,结果为-1
|:位或,只要有1就为1,否则就为0
&:位与,只要有0就为0.否则为1
^:异或,只要不同就为1,相同则为0
~:取反,将每一位进行取反,0变1,1变0,符号位也要取反
<<:左移,右边以0补全
>>:右移,左边以符号位补全
3>字节大小运算符
sizeof(数据类型/变量名)
4>关系运算符
>,<,>=,<=,!=,==
在计算机中把关系运算看成一个事件,事件如果为真就为1,为假就为0,这个地方产生的结果我们称为逻辑结果
5>逻辑运算符
&&:而且,事件1 && 事件2;如果两个事件都成立,整个事件才成立,结果为1,否则为0
||:或,事件1 || 事件2;只要有1个事件成立,整个事件就成立,结果为1,否则为0
!:非,!事件,如果事件成立,那么整个事件就不成立,结果为0,否则为1
逻辑运算符注意点:
1)&&符号,如果第一个事件成立,就不会运算&&后面的运算
2)||符号,如果第一个事件成立,就不会运算||后面的运算
6>++ --
前缀++:
int num1=2;
int result=++num1;//num1=num1+1,result=num1;
printf("result=%d\nnum1=%d\n",result,num1);
后缀++
int num1=2;
int result=num1++;//result=num1,num1=num1+1;
printf("result=%d\nnum1=%d\n",result,num1);
前缀--:
int num1=2;
int result=--num1;//num1=num1-1,result=num1;
printf("result=%d\nnum1=%d\n",result,num1);
后缀--
int num1=2;
int result=num1--;//result=num1,num1=num1-1;
printf("result=%d\nnum1=%d\n",result,num1);
7>赋值运算符(将右边的值赋值给左边)
=,+=,-=,*=,/=,%=,|=,&=,^=,>>=,<<=
8>三目运算符
?:事件?表达式1:表达式2;
如果事件成立,就运行表达式1,将表达式1的结果作为最后的运算结果;否则就运算表达式2,将表达式2的结果作为运算的最终结果。
9>运算符的优先级
①(优先级由高到底)()→一元(单目)运算符→算术运算符→关系运算符→逻辑运算符→赋值运算符→逗号
②(优先级由高到底)单目运算符→双目运算符→三目运算符→赋值运算符→逗号
也可以不记:()能解决一切问题
22.数据的存储规范
1>大端:大的数据存在地址较低的内存单元,小的数据存在地址较高的内存单元
2>小端:大的数据存在地址较高的内存单元,小的数据存在地址较底的内存单元(inter基本都是用小端存储)