嵌入式 note 2.3--2.5
scanf()从标准输入(键盘)获取数据,遇到不符合格式要求的数据结束,适用于复杂格式输入。
2.3 note
1. scanf()
从标准输入(键盘)获取数据,遇到不符合格式要求的数据结束,适用于复杂格式输入。
2. getchar()
从标准输入(键盘)获取数据,一次只读取一个字符,遇到文件结束符停止(ctrl+z)。
3. gets()
(已经废弃,不建议使用,容易造成缓冲区溢出)从标准输入(键盘)获取数据,遇到换行符结束('\n'),会将换行符替换成字符串中止符('\0')。
gets() 因存在缓冲区溢出安全漏洞,已被 C11 标准正式移除,实际开发中应使用 fgets() 替代。
4. fgets()
从输入源(键盘或文件)获取一行字符串,遇到换行符或者达到指定的输入字符大小时结束。
scanf() 在读取字符串时会自动跳过空白符(空格、换行、制表符),而 fgets() 会完整保留输入的换行符。
如果遇到换行符('\n'), 会将换行符也加在字符串里面,然后再添加'\0'。
my name is zsf!\n\0
1.stdin,stdout stderr 定义在 /usr/include/stdio.h
stdin: 标准输入流。
stdout: 标准输出流,带缓冲。
stderr: 标准错误输出,不带缓存,实时性好。
输入输出流重定向:
> 输出重定向
< 输入重定向
2> 错误输出从定向
2.vi 操作
gg------> 跳到文本的首行
G------> 跳到文本最后一行
2.4 note
1.按位与:&
只有对应的两个位都为1时,结果才为1,否则为0。
2.按位或:|
只有有一个位为1,结果就为1。
3.按位异或:^
相同为0,不同为1。只有两个位不同,结果才为1,否则为0。
4.按位非:~
每一位,按位取反。1变0,0变成1。
32位系统,寄存器是32位的。32/4=8组
5.在计算机系统里面,正数是直接保存对应的二进制格式数据,负数保存的是对应的补码。
补码=负数的绝对值取反+1。如果一个数的最高位为1,表示这个数,是一个负数。
原码=补码取反+1。要注意加上-(负号)。
6.移位操作
1)左移
左边最高位被移出去,右边最低位补0。0x64左移一位后,变成0xc8,左一位相当于乘以2。
2)右移(对无符号数,逻辑右移)
左边最高位补0,右边最低位被移出去。0x64右移一位后,变成0x32,左一位相当于除以2。
2.5 note
1.关系运算符
大于>,小于 <,大于等于 >=,小于等于 <=,等于 == ,不等于!=,
左右两边一般都是一个表达式,关系运算符的结果,为真(非0)或者为假(为0)。
2.算术运算符
自加++,自减--
int num=5;
printf("num++:%d\n",num++); //这个表达式num++取的是 num之前的值,
printf("num:%d\n",num);
printf("++num:%d\n",++num); //这个表达式++num取的是 num加一之后的值,
printf("num:%d\n",num);
*****************************************************
num++:5
num:6
++num:7
num:7
3.逻辑运算符(布尔运算)
!--->条件非,&&--->条件与, ||----->条件或
a&&b:a、b都为真,结果才为真,否则为假。
a||b:a、b只要有一个为真,结果就为真,否则为假。
!1=0,!0=1(!真=假,!假=真)。
4.三目运算符
?:
int a = (b>c)? b:c; //获取b、c中较大的那个数,赋予a;
5.sizeof()
用来测出数组的大小,给出是以字节为单位的大小。
int array[10]; char str[10];
sizeof(int) sizeof(char) sizeof(array) sizeof(str)
printf("int:%d\n",sizeof(int));//产生告警信息
sizeof()返回值类型,是size_t类型,本质是无符号整型
printf("int:%zu\n",sizeof(int));
更多推荐



所有评论(0)