电商专业学习嵌入式软件开发第十七天

  • 预科第六天

老师今天讲的内容有点多,需要消化一下,尤其是关于原码反码和补码的内容。有按照之前的笔记练习后面的内容,发现笔记中的代码也有敲错的,只不过不知道怎么改了,只能等后期学到之后再留意一下了。

如果是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基本都是用小端存储)

你可能感兴趣的:(电商专业学习嵌入式软件开发第十七天)