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));

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐