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

提示:理解这些基本操作对于深入掌握数据处理、优化算法以及底层编程至关重要。

目录

前言

6.1 进制

6.1.1进制介绍

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 位运算的思考题

6.14 二进制再运算中的说明

6.15 原码、反码、补码

6.16 位运算符

6.16.1 C 中位运算符介绍

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

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

总结


前言

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


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进制的图示

4d2f3620653747978c580ec27636c880.png

4ac771c5ac6243f38f1f98e2e5b3a29a.png

6.2 进制的转换

6.2.1进制转换的介绍

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

二进制转十进制

八进制转十进制

十六进制转十进制

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

十进制转二进制

十进制转八进制

十进制转十六进制

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

二进制转八进制

二进制转十六进制

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

八进制转二进制

十六进制转二进制

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

871ee3c77bb24553a77d926cb8a5d116.png

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

e5c777658e7645ea918638cc5ed71627.png

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

0efb1b50b53d41f79d4d05a2eb0bf077.png

6.6 十进制转换成二进制

ca2d9d1ccb424dfc89da0fc952d43bf6.png

6.7 十进制转换成八进制

c2dc78a6e2bc41e2b0538e56f570aac6.png

6.8 十进制转换成十六进制

804e9d9d4e2a474e937263625bb22067.png

6.9 二进制转换成八进制

6cc24ca1c03b4aec9eefaf675fd003ed.png

6.10 二进制转换成十六进制

7d7fc32bad3d41ffb76e0549570301f5.png

6.11 八进制转换成二进制

4d364b6fac9d4daa854d6f9db6f3434f.png

6.12 十六进制转换成二进制

1e65a5b2f543495bafdc9cb962a23ef4.png

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

}

2) 请回答在 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 中位运算符介绍

b3dd9e37b38848288dfffba32a5efe97.png

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=?

完成前面的案例!

ac208947dc2d429db8abe2d967e072c0.png

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. 完成前面的案例!

a0cf92650c7d430c851a911feb8242e4.png


总结

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

附录

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

 

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值