问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言学习--二进制和位运算

创作时间:
作者:
@小白创作中心

C语言学习--二进制和位运算

引用
CSDN
1.
https://blog.csdn.net/weixin_62881069/article/details/141232163

在计算机科学中,进制转换和位运算是核心概念。理解这些基本操作对于深入掌握数据处理、优化算法以及底层编程至关重要。本文将从进制的基本知识入手,逐步解读各种进制转换方法和位运算的应用示例,帮助你全面掌握这些技术。

6.1 进制

6.1.1进制介绍

对于整数,有四种表示方式:

  1. 二进制:0,1 ,满 2 进 1,C 语言中没有二进制常数的表示方法。

  2. 十进制:0-9 ,满 10 进 1。

  3. 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。

  4. 十六进制:0-9 及 A-F,满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。[A->10 B->11 C->12 D->13 E->14 F->15 ]
    如:0x21AF +1= 0X21B0

Ø 举例说明:

int num2 = 210; //十进制
int num3 = 01010; //八进制
int num4 = 0x1010;//十六进制

6.1.2进制的图示

6.2 进制的转换

6.2.1进制转换的介绍

Ø 第一组:(其它进制转十进制)
二进制转十进制
八进制转十进制
十六进制转十进制

Ø 第二组: (十进制转其它进制)
十进制转二进制
十进制转八进制
十进制转十六进制

Ø 第三组(二进制转其它进制)
二进制转八进制
二进制转十六进制

Ø 第四组(其它进制转二进制)
八进制转二进制
十六进制转二进制

6.3 二进制转换成十进制示例

6.4 八进制转换成十进制示例

6.5 十六进制转换成十进制示例

6.6 十进制转换成二进制

6.7 十进制转换成八进制

6.8 十进制转换成十六进制

6.9 二进制转换成八进制

6.10 二进制转换成十六进制

6.11 八进制转换成二进制

6.12 十六进制转换成二进制

6.13 位运算的思考题

  1. 请看下面的代码段,回答 a,b,c,d,e 结果是多少?

void maiin(){
int a=1>>2; // 1 向右位移 2 位 , 这里还涉及到二进制中 原码,反码,补码
int b=-1>>2;
int c=1<<2;//int d=-1<<2;
////a,b,c,d,e 结果是多少
printf("a=%d b=%d c=%d d=%d ",a,b,c,d);
getchar();
}

  1. 请回答在 C 中,下面的表达式运算的结果是: (位操作)

~2=? // 按位取反
2&3=?
2|3=?
~-5=?
13&7=?
5|4=?
-3^3=?

6.14 二进制再运算中的说明

二进制是逢 2 进位的进位制,0、1 是基本算符。现代的电子计算机技术全部采用的是二进制,因为它只使用 0、1 两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用 0 和 1 两个数字及其组合来表示任何数。进位规则是“逢 2 进 1”,数字 1 在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

6.15 原码、反码、补码

网上对原码,反码,补码的解释过于复杂,我这里精简几句话:

对于有符号的而言:

  1. 二进制的最高位是符号位: 0 表示正数,1 表示负数
  2. 正数的原码,反码,补码都一样 (三码合一)
  3. 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
  4. 负数的补码=它的反码+1 //
  5. 0 的反码,补码都是 0
  6. 在计算机运算的时候,都是以补码的方式来运算的。

6.16 位运算符

6.16.1 C 中位运算符介绍

6.16.2 C 语言位运算说明(1)

它们的运算规则是:

  1. 按位与& : 两位全为1,结果为 1,否则为 0
  2. 按位或| : 两位有一个为 1,结果为 1,否则为 0
  3. 按位异或 ^ : 两位一个为 0,一个为 1,结果为 1,否则为 0
  4. 按位取反 : 0->1 ,1->0
    比如:~2=? ~-5=? 2&-3=? 2|3=? 2^3=?

完成前面的案例!

6.16.3 C 语言位运算说明(2):

、<< 算术右移和算术左移,运算规则:

  1. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移 <<: 符号位不变,低位补 0

int a=1>>2; // a ? 1 / 2 / 2 = 0
int d = -1>>2 // ? -1
int c=1<<2; // c 1 * 2 * 2 = 4

留一个作业 -1 << 2 ?

  1. 完成前面的案例!

总结

掌握进制转换和位运算不仅能提高编程能力,还能加深对计算机内部数据处理的理解。通过实际示例,我们看到不同进制之间的转换方法以及位运算的实际应用。这些知识为解决复杂编程问题打下了坚实的基础。希望本文的解析能为你的学习和工作提供有价值的参考。

附录

参考:【尚硅谷C语言零基础快速入门教程-哔哩哔哩】 https://b23.tv/vS3vTDp

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号