找回密码
 立即注册
楼主: 平凡

学习《Ai8051U教学视频》感悟及学习体会

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:19:20 | 显示全部楼层
第五课  C语言基础(续4)
位运算符(Bitwise Operators1概念
位运算符用于对整数的二进制表示进行操作。

例如:

int a = 5, b = 3;
int andBitwise = (a & b); // 1
int orBitwise = (a | b); // 7
int xorBitwise = (a ^ b); // 6
int notBitwise = ~a; // -6
int leftShift = (a << 2); // 20
int rightShift = (a >> 2); // 1

2.应用
位运算符(Bitwise Operators)用于对整数的二进制表示进行操作。它们在C语言中非常强大,尤其适用于底层编程、优化性能和处理硬件相关的任务。以下是C语言中常见的位运算符及其使用方法和例如
1)按位与(Bitwise AND):&
按位与运算符对两个操作数的每一位进行逻辑与操作。如果两个位都为1,则结果为1;否则为0

例如
#include <stdio.h>
int main()
{
int a = 12; // 二进制:1100
int b = 10; // 二进制:1010
int result = a & b; // 二进制:1000,十进制:8
printf("Result of a & b: %d\n", result);
return 0;
}
输出:
Result of a & b: 8

2按位或(Bitwise OR):|
按位或运算符对两个操作数的每一位进行逻辑或操作。如果两个位中至少有一个为1,则结果为1;否则为0
例如

#include <stdio.h>
int main()
{
int a = 12; // 二进制:1100
int b = 10; // 二进制:1010
int result = a | b; // 二进制:1110,十进制:14
printf("Result of a | b: %d\n", result);
return 0;
}
输出:
Result of a | b: 14

3按位异或(Bitwise XOR):^
按位异或运算符对两个操作数的每一位进行逻辑异或操作。如果两个位不同,则结果为1;否则为0

例如
#include <stdio.h>
int main()
{
int a = 12; // 二进制:1100
int b = 10; // 二进制:1010
int result = a ^ b; // 二进制:0110,十进制:6
printf("Result of a ^ b: %d\n", result);
return 0;
}
输出:
Result of a ^ b: 6

4按位取反(Bitwise NOT):~
按位取反运算符对操作数的每一位进行取反操作。0变为11变为0

例如
#include <stdio.h>
int main()
{
int a = 12; // 二进制:00001100(假设是8位)
int result = ~a; // 二进制:11110011,十进制:-13(补码表示)
printf("Result of ~a: %d\n", result);
return 0;
}
输出:
Result of ~a: -13

注意:C语言中,整数通常以补码形式存储,因此按位取反的结果可能与直观的二进制取反不同。

5左移(Bitwise Left Shift):<<
左移运算符将操作数的二进制表示向左移动指定的位数,右侧补0

例如
#include <stdio.h>
int main()
{
int a = 12; // 二进制:00001100(假设是8位)
int result = a << 2; // 二进制:00110000,十进制:48
printf("Result of a << 2: %d\n", result);
return 0;
}
输出:
Result of a << 2: 48

6右移(Bitwise Right Shift):>>
右移运算符将操作数的二进制表示向右移动指定的位数,左侧补符号位(对于有符号整数)或补0(对于无符号整数)。

例如

#include <stdio.h>
int main()
{
int a = 12; // 二进制:00001100(假设是8位)
int result = a >> 2; // 二进制:00000011,十进制:3
printf("Result of a >> 2: %d\n", result);
return 0;
}
输出:
Result of a >> 2: 3

7实际应用
例如:检查一个数是否为2的幂
一个数如果是2的幂,则其二进制表示中只有一个1。通过按位与操作可以检查这一点:

#include <stdio.h>
int main()
{
int num = 16;
if ((num & (num - 1)) == 0 && num != 0)
{
printf("%d is a power of 2\n", num);
} else
{
printf("%d is not a power of 2\n", num);
    }
return 0;
}
输出:
16 is a power of 2


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:19:32 | 显示全部楼层
第五课  C语言基础(续5)

赋值运算符(Assignment Operators

1.概念

赋值运算符用于将值赋给变量。

例如:
int a = 10, b = 3;
a += b; // a = 13
a -= b; // a = 10
a *= b; // a = 30
a /= b; // a = 10
a %= b; // a = 1

2.应用

C语言中,赋值运算符用于将一个值赋给一个变量。除了基本的赋值运算符=之外,C语言还提供了一些复合赋值运算符,用于简化代码并提高效率。以下是赋值运算符的详细用法:

1基本赋值运算符(=

基本赋值运算符=用于将一个值赋给一个变量。语法如下:
variable = value;
variable 是要赋值的目标变量。
value 是要赋给变量的值,可以是一个常量、另一个变量或表达式的值。
例如
int a;
a = 10; // 将整数值10赋给变量a

2复合赋值运算符

复合赋值运算符结合了基本赋值运算符和其他运算符,用于执行某种运算并将结果赋值给变量。常见的复合赋值运算符包括:

a.加法赋值运算符(+=

将变量的值与另一个值相加,并将结果赋回变量。

variable += value;
等价于:
variable = variable + value;
例如
int a = 5;
a += 3; // 等价于 a = a + 3,结果 a = 8

b.减法赋值运算符(-=

将变量的值与另一个值相减,并将结果赋回变量。

variable -= value;
等价于:
variable = variable - value;
例如
int a = 5;
a -= 3; // 等价于 a = a - 3,结果 a = 2

c.乘法赋值运算符(*=

将变量的值与另一个值相乘,并将结果赋回变量。
variable *= value;
等价于:
variable = variable * value;
例如
int a = 5;
a *= 3; // 等价于 a = a * 3,结果 a = 15
d.除法赋值运算符(/=
将变量的值与另一个值相除,并将结果赋回变量。
variable /= value;
等价于:
variable = variable / value;
例如
int a = 10;
a /= 2; // 等价于 a = a / 2,结果 a = 5

e.取模赋值运算符(%=

将变量的值与另一个值取模,并将结果赋回变量。

variable %= value;
等价于:
variable = variable % value;
例如
int a = 10;
a %= 3; // 等价于 a = a % 3,结果 a = 1

f.位运算赋值运算符

位运算符也可以与赋值运算符结合使用,用于执行位运算并将结果赋回变量。
位与赋值运算符(&=
variable &= value;
等价于:
variable = variable & value;
例如
int a = 5; // 二进制表示为 0101
a &= 3;    // 二进制表示为 0011
// 结果 a = 0101 & 0011 = 0001,即 a = 1
位或赋值运算符(|=
variable |= value;
等价于:
variable = variable | value;
例如
int a = 5; // 二进制表示为 0101
a |= 3;    // 二进制表示为 0011
// 结果 a = 0101 | 0011 = 0111,即 a = 7
位异或赋值运算符(^=
variable ^= value;
等价于:
variable = variable ^ value;
例如
int a = 5; // 二进制表示为 0101
a ^= 3;    // 二进制表示为 0011
// 结果 a = 0101 ^ 0011 = 0110,即 a = 6
左移赋值运算符(<<=
variable <<= value;
等价于:
variable = variable << value;
例如
int a = 5; // 二进制表示为 0101
a <<= 2;   // 左移两位
// 结果 a = 0101 << 2 = 10100,即 a = 20

g.右移赋值运算符(>>=

variable >>= value;
等价于:
variable = variable >> value;
例如
int a = 5; // 二进制表示为 0101
a >>= 2;   // 右移两位
// 结果 a = 0101 >> 2 = 0001,即 a = 1

h.使用场景

赋值运算符在C语言中非常常用,可以简化代码并提高可读性。例如:
int a = 10;
a += 5;  // 等价于 a = a + 5
a -= 3;  // 等价于 a = a - 3
a *= 2;  // 等价于 a = a * 2
a /= 4;  // 等价于 a = a / 4
a %= 3;  // 等价于 a = a % 3
通过使用复合赋值运算符,代码更加简洁明了,同时也减少了重复的变量引用,提高了代码的效率。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:21:50 | 显示全部楼层
第五课  C语言基础(续6)

条件运算符(Conditional Operator

1.概念

条件运算符(也称为三元运算符)用于根据条件选择两个值中的一个。


例如:
int a = 10, b = 3;
int max = (a > b) ? a : b; // max = 10

2.应用

C语言中的条件运算符(也称为三元运算符)是一种简洁的语法,用于根据条件选择两个值中的一个。它的语法形式为:
condition ? expressionTrue : expressionFalse;
语法解释
condition:一个布尔表达式,用于判断条件是否为真(true)或假(false)。
expressionTrue:如果条件为真(true),则返回这个表达式的值。
expressionFalse:如果条件为假(false),则返回这个表达式的值。
使用例如
例如1:比较两个数的大小
假设我们需要比较两个数,找出较大的那个数,可以使用条件运算符:
int a = 10, b = 20;
int max = (a > b) ? a : b;
printf("The larger number is: %d\n", max);
输出:
The larger number is: 20
在这个例子中,条件是a > b。如果a > b为真(true),则max的值为a;否则,max的值为b
例如2:根据条件赋值
假设我们需要根据一个条件给变量赋值,例如:
int score = 85;
char grade = (score >= 60) ? 'P' : 'F';
printf("Grade: %c\n", grade);
输出:
Grade: P
在这个例子中,条件是score >= 60。如果score大于或等于60grade被赋值为'P'(表示通过);否则,grade被赋值为'F'(表示失败)。
例如3:嵌套条件运算符
条件运算符也可以嵌套使用,例如:
int score = 75;
char grade = (score >= 90) ? 'A' :
(score >= 80) ? 'B' :
(score >= 70) ? 'C' :
(score >= 60) ? 'D' : 'F';
printf("Grade: %c\n", grade);
输出:
Grade: C
在这个例子中,我们使用了嵌套的条件运算符来根据不同的分数范围给grade赋值:
如果score >= 90grade'A'
如果score >= 80但小于90grade'B'
如果score >= 70但小于80grade'C'
如果score >= 60但小于70grade'D'
如果score < 60grade'F'

例如学习者需要注意的几个问题:可读性:虽然条件运算符可以简化代码,但过度使用或嵌套过多可能会使代码难以阅读和维护。在复杂的情况下,建议使用if-else语句。
类型兼容性:expressionTrueexpressionFalse的类型应该兼容,否则可能会导致编译错误或运行时错误。
逻辑清晰:确保条件表达式的逻辑清晰,避免因逻辑错误导致程序行为异常。
条件运算符与if-else的对比
条件运算符可以看作是if-else语句的简化形式。例如,
以下if-else语句:
int a = 10, b = 20;
int max;
if (a > b)
{
max = a;
} else
{
max = b;
}
可以使用条件运算符简化为:
int a = 10, b = 20;
int max = (a > b) ? a : b;

条件运算符在某些情况下可以使代码更简洁,但在逻辑复杂时,if-else语句可能更清晰。
总之,条件运算符是一种非常有用的工具,可以在适当的情况下简化代码,但也要注意保持代码的可读性和可维护性。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:23:34 | 显示全部楼层
1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:24:20 | 显示全部楼层
1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:25:44 | 显示全部楼层
1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 01:26:08 | 显示全部楼层
1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 10:32:47 | 显示全部楼层
1
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 10:33:29 | 显示全部楼层
          第五课  C语言基础(续4)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-04-17 21:45:25

10

主题

36

回帖

262

积分

中级会员

积分
262
发表于 2025-2-13 10:34:00 | 显示全部楼层
1
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 20:24 , Processed in 0.143025 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表