【初阶C语言】操作符1--对二进制的操作

这篇具有很好参考价值的文章主要介绍了【初阶C语言】操作符1--对二进制的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:本节内容介绍的操作符,操作的对象是二进制位。所以前面先介绍整数的二进制位

一、二进制位介绍

1.二进制介绍

(1)整数的二进制表示形式有三种:原码、反码和补码。

(2)原码、反码和补码的长度有数据类型来决定,如整数,就是四个字节,转化后是三十二位比特位,所以一个整数写成二进制序列的时候,是32个bit位。

(3)数据是以补码的形式在内存中存储的。

(4)正负数原码、反码和补码不一样

2.正数三码的介绍

(1)正数的原码、反码和补码都一样,不需要计算,可以直接得出来。

(2)举例

7,我们先把7转化成二进制数:111;由于整数的二进制序列是32位,所以其他我需要补0,就写成这样

原码:00000000 00000000 00000000 00000111

反码:00000000 00000000 00000000 00000111

补码:00000000 00000000 00000000 00000111

3,二进制数为:11  二进制序列:

原码:00000000 00000000 00000000 00000011

反码:00000000 00000000 00000000 00000011

补码:00000000 00000000 00000000 00000011

3.负数三码的介绍

我们接下来重点介绍负数的原码、反码和补码

(1)原码

对于有符号的整数来说,最高位的一位是符号位;符号位是1表示负数,符号位是0表示正数。若是无符号数,没有符号位,所有位都是有效位。数字0则当成无符号数来看待。

正数:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

负数:【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

对于有符号数来说,正负数原码的差异就是在最高位。

(2)反码

1.反码,顾名思义就是取反。

定义:反码是在原码的基础上,除了符号位,其他按位取反,1的话就写成0,0就写成1。

2.-7的反码

原码:10000000 00000000 00000000 00000111

反码:11111111  11111111   11111111  11111000

(3)补码

1.定义:补码则是在反码的基础上+1。

2.-7的补码

原码:10000000 00000000 00000000 00000111

反码:11111111  11111111   11111111  11111000

补码:11111111  11111111   11111111  11111001

而补码,就是数据在内存中的存储形式。所以整数在计算的时候使用的也是补码。

总结:三码的转换规则:原码----(取反)--->反码-----(+1)---->补码

补码----(-1)--->反码----(取反)--->原码

补码----(取反,+1)--->原码

二、移位操作符

前言:移位操作符包括左移操作符(<<)和右移操作符(>>)

1.左移操作符(<<)

(1)常用口诀:左边丢弃,右边补0

(2)代码演示

#include<stdio.h>
int main()
{
	int a = 7;
	int b = a << 1;//a向左移动一位

	printf("%d\n",a);//a的本质没有改变
	printf("%d\n",b);
	return 0;
}

代码结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

由上面很清楚的就可以知道,其实a的值还是-7,没有改变。

代码演示2:

#include<stdio.h>
int main()
{
	int a = -7;//将a的值改成负数
	int b = a << 1;
    int c = a << 2;
	printf("%d\n",a);
	printf("%d\n",b);
    printf("%d\n",c);
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

两次代码演示初步总结:左移一位,结果在原数据基础上×2;左移两位,结果在原数据基础上×3;但原数据的值不会改变。

(3)左移符号解析

左移符号,移动的是补码,但是打印的时候打印的是原码。

正数左移:7

原码:00000000 00000000 00000000 00000111

反码:00000000 00000000 00000000 00000111

补码:00000000 00000000 00000000 00000111

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

正数的左移比较容易看出来,因为原码、反码和补码都相同

负数右移:-7

原码:10000000 00000000 00000000 00000111

反码:11111111  11111111   11111111  11111000

补码:11111111  11111111   11111111  11111001

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

总结:

    无论正数还是负数,左移的结果都会×2。

记忆口诀:左边丢弃,右边补0。

2.右移操作符(>>)

(1)右移操作符分类

右移操作符包括:算术右移和逻辑右移

逻辑右移:右边直接丢弃,左边补0

算术右移:右边直接丢弃,左边补原符号位(正数补0,负数补1)-----------常用选择

 我们下面的例子也都用算术右移来演示

(2)代码演示

#include<stdio.h>
int main()
{
	int a = 10;
	int b = a >> 1;
	printf("%d\n", a);
	printf("%d\n", b);

	int c = -10;
	int d = c >> 1;
	printf("%d\n", c);
	printf("%d\n",d);
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

其实不难发现,算术右移其实也有一种÷2的效果。

(3)右移图示解析

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

 

总结:大多数编译器都是使用算术右移,效果相当于÷2

算术右移口诀:右边丢弃,左边补原符号位

3.左移、右移总结

(1)移动的对象只能是整数

(2)只能移动正整数位,比如左移一位、右移两位。

(3)移动后不会改变原数据的值

(4)移动的是二进制的补码,打印的结果是二进制的原码

三、位操作符

前言:位操作符的对象仍然是二进制的补码,他们必须有两个操作对象

1.按位与(&)

(1)定义

两个对象的补码比较,相同位有0则结果位0,相同位都是1结果才为1。

 (2)代码演示

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 7;
	int c = a & b;//将按位与的结果赋值给c

	printf("%d\n",c);
	return 0;
}

 运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(3)代码分析

我们先列出5和7的补码:

5的补码:00000000 00000000 00000000 00000101

7的补码:00000000 00000000 00000000 00000111

图解:【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(4)实列讲解

根据有0为0,两个1才为1的特点,可以按位与1来确定最低一位(最右一边)是1或者0。

代码演示:

#include<stdio.h>
int main()
{
	int a = 3;
	int b = a & 1;
	printf("%d\n",b);
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

 结果分析:

3的补码:00000000 00000000 00000000 00000011

1的补码:00000000 00000000 00000000 00000001

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

所以,任何数按位与1,得出的结果为1,则该数的二进制最低为是1,如果是0,则最低为是0。当然,要知道该数的二进制序列的所以1,则需要配合右移符号使用(后续补充)

2.按位或(|)

(1)定义

二进制序列对应位上,有1则为1,两个相同才为0。

(2)代码演示

#include<stdio.h>
int main()
{
	int a = 5;
	int b = -3;
	int c = a | b;//按位或
	printf("%d\n",c);
	return 0;
}

 运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(3)代码解读

5的补码:00000000 00000000 00000000 00000101

-3的补码:11111111 11111111 11111111 11111101

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

3.按位异或(^)

(1)定义

对应的二进制位相同为0,相异为1

由此而来的知识点:a^a=0          a^0=a

(2)代码演示

#include<stdio.h>
int main()
{
	int a = 5;
	int b = -3;
	int c = a ^ b;//按位异或
	printf("%d\n", c);
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(3)代码解读

5的补码:00000000 00000000 00000000 00000101

-3的补码:11111111 11111111 11111111 11111101

 【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(4)实例讲解

题目:在不借助第三方变量的情况下,交换两个变量的值

代码演示:

#include<stdio.h>
int main()
{
	int a = 520;
	int b = 1314;
	a = a ^ b;
	b = a ^ b;//此时的a=a^b
	a = a ^ b;
	printf("a=%d b=%d\n",a,b);
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

代码解读:

第一步:a=a^b;这个结果先不要算出来

第二步:b=a^b;这个时候左边的a=a^b,所以整个等式变成b=a^b^b,因为b^b=0,且a^0=a,所以此时就将a的值赋给了b,

第三步:a=a^b,此时左边的a=a^b,b=a,所以左边=a^b^a=b,所以就将b赋值给了a,完成两个数的交换

 

四、某些复合赋值操作符和一个单目操作符

前言:操作对象都是二进制的补码

1.复合赋值操作符

(1)赋值操作符的介绍

>>=    右移等
<<=    左移等
&=      按位与等
|=       按位与等
^=      按位异或等

 (2)使用方法

上面的这些符号就多了一个等号,就如同+=一样

代码举例:

#include<stdio.h>
int main()
{
	int a = 5;
	a = a >> 1;//普通写法
	a >>= 1;//复合写法

	a = a << 1;
	a <<= 1;

	a = a & 2;
	a &= 2;//复合写法

	a = a | 4;
	a |= 4;

	a = a ^ 1;
	a ^= 1;
	return 0;
}

2.一个单目操作符

(1)定义:~(一个波浪号)

作用:对一个数的二进制按位取反

(2)代码演示

#include<stdio.h>
int main()
{
	int a = 0;
	printf("%d\n",~a);//单目操作符
	return 0;
}

运行结果:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

(3)例子

#include<stdio.h>
int main()
{
	int a = 10;
	a |= (1 << 4);//控制二进制将10变成26
	printf("%d\n",a);
	//再将26变回10
	a &= (~(1 << 4));
	printf("%d\n",a);
	return 0;
}

10的补码:00000000 00000000 00000000 00001010

26的补码:00000000 00000000 00000000 00011010

 10变成26:

【初阶C语言】操作符1--对二进制的操作,初阶C语言,c++,开发语言

 26变回10:只需将该位置按位与上0即可文章来源地址https://www.toymoban.com/news/detail-705468.html


到了这里,关于【初阶C语言】操作符1--对二进制的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【C语言初阶(16)】操作符2

    【C语言初阶(16)】操作符2

    在 C 语言中,使用关系操作符来判断两个数之间的大小关系。 关系运算符都是双目运算符 ,其结合性均为从左到右。 关系运算符的优先级低于算术运算符,高于赋值运算符。 逻辑运算符获得的是一个逻辑值, 逻辑值只有 “ 真 ” 或 “ 假 ”两种状态 。 运算符 含义 优先级

    2024年02月16日
    浏览(24)
  • 【C语言初阶(七)】操作符详解

    【C语言初阶(七)】操作符详解

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 我们已经在了解C语言的内一章节熟悉了所有的操作符了解C语言.其实操作符还有一些更细节更有用的延申内容,本章就给大家带来

    2024年02月09日
    浏览(23)
  • 【C语言】简单介绍进制和操作符

    【C语言】简单介绍进制和操作符

    🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C++笔记专栏: C++笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 十进制属于一种常见的进制,它满足 满十进一 并且数字每一位都是0~9数字组成的。 二进制也是同理 满二进一 并且数字每一位都是0~1数字组成的

    2024年04月16日
    浏览(4)
  • 『C语言初阶』第六章-操作符详解

    『C语言初阶』第六章-操作符详解

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 🌥️ 每日语录 : 业精于勤,荒于嬉。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 今天小羊又来为铁汁们更新C语言初阶的操作符详解,我们在平时写代码时总会写到一些算术操作符和赋值操作符,可是当铁汁们遇到其他的操作

    2024年02月14日
    浏览(6)
  • 【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

    【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换

    欢迎大家来到c语言知识小课堂,今天的知识点是操作符和进制 同样都是数字1111,不同进制下数字的大小不同,第二行代表的是其各位数字十进制下的大小,将各位数字的十进制大小相加即1111在这个进制下转化为十进制的大小,从图中我们可以看出来 进制的定义:从右往左

    2024年02月22日
    浏览(13)
  • 【初阶C语言】操作符2---表达式求值

    【初阶C语言】操作符2---表达式求值

    前言:本节重点介绍操作符的使用,如,优先级高低、类型转换等 前言:逻辑操作符包括 逻辑与() 和 逻辑或(||) ,操作对象:两个 1.逻辑与() (1)定义 的字面意思就是并且。如:AB,需要A和B同时成立,整体才成立。 (2)图形解释  0表示假,所以需要A和B同时满足

    2024年02月09日
    浏览(9)
  • 【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ & ”,“ | ”,“ ^ ”,“ ~ ”)

    【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ & ”,“ | ”,“ ^ ”,“ ~ ”)

    目录 C语言中六种位运算符: 一、位移运算符 1、移位运算符简介 2、先要了解一点 3、 左移运算符 4、右移运算符 5、警告 二、 1、 按位与 2、| 按位或 3、^ 按位异或 4、~ 取反 4、例子  按位与 | 按位或 ^ 按位异或 ~取反 右移 左移 位运算符用来对二进制位进行操作,C语言中

    2024年02月06日
    浏览(10)
  • C语言操作符篇章+系统讲解分析+深入理解操作符+原反补结合的具体应用+根源进行讲解+进制转换+操作环境+实例剖析+上万字+百张图片精细化讲解

    C语言操作符篇章+系统讲解分析+深入理解操作符+原反补结合的具体应用+根源进行讲解+进制转换+操作环境+实例剖析+上万字+百张图片精细化讲解

    在讲解操作符之前需要讲解一下原反补和进制之间的转换 并且在讲解操作符的时候会重点对难点进行讲解,也就是算数操作符和逻辑操作符 并且会在讲解附带实例 和最后面的代码分析 ————————————————————————————————————————

    2024年02月20日
    浏览(5)
  • 【c语言】二进制文件的读写操作

    【c语言】二进制文件的读写操作

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 本文基

    2024年02月12日
    浏览(10)
  • 肉眼无法读懂是二进制独有的浪漫——一篇博客学懂文件操作(C语言)

    肉眼无法读懂是二进制独有的浪漫——一篇博客学懂文件操作(C语言)

    目录 一、为什么使用文件 二、什么是文件 2.1程序文件 2.2数据文件 2.3文本文件和二进制文件 2.4文件名 三、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 3.3文件的顺序读写函数 3.3.1流的概念 3.3.2输入输出的概念  3.3.3函数操作 3.4文件的随机读写函数 3.4.1fseek 3.4.2 fte

    2024年02月06日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包