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

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

欢迎大家来到c语言知识小课堂,今天的知识点是操作符和进制
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记

一、进制之间的转化

1、什么是二进制,八进制,十进制,十六进制

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
同样都是数字1111,不同进制下数字的大小不同,第二行代表的是其各位数字十进制下的大小,将各位数字的十进制大小相加即1111在这个进制下转化为十进制的大小,从图中我们可以看出来进制的定义:从右往左一次用各位上的数字乘以这个进制的n次方(n为从右往左以0为首依次++的数字)

2、进制之间的转化

其他进制转化为十进制

如上图所说,将所有数字相加即转化的十进制数

十进制转化为二进制

假设我们将十进制数120转化为二进制数
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
得出的结果为1111000
进行转化的方法就是:这个数字%2,得到的余数写在一边,直到最后被除数为0时,再将数字从下往上抄上,这个数字即为十进制数字的二进制数

二进制转化为八进制

二进制----->八进制
1 ---------------> 1
10 --------------> 2
11 --------------> 3
100 ------------> 4
101 ------------> 5
110 ------------> 6
111 ------------> 7
八进制下最大的数字就是7,我们可以用三个二进制数字来表示,也就是说每三个二进制数字就可以表示一个八进制数字
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
规则是从右开始每三位数字为一组,转化为其对应的八进制数字,再抄在一起,即为这个二进制数字的八进制大小,不足三个的剩下的为一组(在不足三个的前面添0使其补足三个更容易理解)

八进制转化为二进制

就是将每一位拆开,把每一位数字转化为其对应的二进制数字,最后抄在一起就可以了,即二进制转化为八进制的逆过程

二进制转化为十六进制

二进制转化为十六进制与转化为二进制转化为八进制大同小异,我们举的例子还是上面的那个二进制数字
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
二进制----->十六进制
1 ---------------> 1
10 --------------> 2
11 --------------> 3
100 ------------> 4
101 ------------> 5
110 ------------> 6
111 ------------> 7
1000 ----------->8
1001-----------> 9
1010-----------> a
1011-----------> b
1100 ----------->c
1101 ----------->d
1110 ----------->e
1111 ----------->f
四位二进制数就可以表示十六进制下的最大数字f(即十进制下的15)
规则是从右开始每四位数字为一组,转化为其对应的十六进制数字,再抄在一起,即为这个二进制数字的十六进制大小,不足四个的剩下的为一组(在不足四个的前面添0使其补足四个更容易理解)

十六进制转化为二进制

就是将每一位拆开,把每一位数字转化为其对应的四位二进制数字,最后抄在一起就可以了,即二进制转化为十六进制的逆过程

二、原码、反码和补码

原码反码补码是计算机整数的二进制数的表示的三种形式,存储在计算机中的数据是补码
三种表⽰⽅法均有符号位数值位两部分,2进制序列中,最⾼位的1位是被当做符号位(0表示正,1表示负),剩余的都是数值位。
正整数的原反补码都相等,下面主要来说负整数的原反补码
(特别需要说明的是:原码转化成补码可以先反码再+1,补码转化成原码除了-1后再反码也可以先反码再+1)

1、原码

直接将数值按照正负数的形式翻译成⼆进制

2、反码

将原码的符号位不变,其他位依次按位取反

3、补码

反码+1

三、操作符

1、位操作符

&按位与操作符

按位与操作符用于取两个操作数的按位与结果。
规则:只有当两个对应的二进制位都为1时,结果为1;否则结果为0。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = a & b;
	printf("%d", c);
	return 0;
}

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
运行结果为零
我们来分析一下这个代码
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
都为1时为1,否则就是0,结果为0
需要注意的是 && 是逻辑操作符,表示逻辑与

当然&也表示取地址操作符

|按位或操作符

按位或操作符用于取两个操作数的按位或结果。
规则:只有当两个对应的二进制位都为0时,结果为0;否则结果为1。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = a | b;
	printf("%d", c);
	return 0;
}

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
运行结果为30
我们来分析一下:都为0则为0,否则为1
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
16+8+4+2=30
值得注意的是 || 是逻辑操作符:逻辑或

^按位异或操作符

按位异或操作符用于取两个操作数的按位异或结果
规则:只有当两个对应的二进制位不相同时,结果为1;否则结果为0。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = a ^ b;
	printf("%d", c);
	return 0;
}

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
运行结果为30
分析:
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
相同为0,不同为1
16+8+4+2=30

~按位取反操作符

按位取反操作符用于对操作数的每个二进制位取反,即将1变为0,0变为1

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

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
得出b的结果为-11,并且通过观察发现~按位取反操作符不会改变被使用量的大小
分析:

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
我们在文章到此之前的内容中所使用的例子都是正整数的例子,其原反补码相同,其实计算机的数据计算是通过补码来进行的,将补码进行运算后再转化成原码
在这里得到的结果为-(8+2+1)= -11

2、移位操作符

操作数只能为整数

<<左移操作符

移位规则:左边抛弃、右边补0

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

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
通过观察我们发现,移位操作符也不会改变被操作数的大小
分析:
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
得到b的结果20
是负数时表示符号的1也将被左移取消掉

>>右移操作符

分为逻辑右移和算数右移
两种右移方式取决于编译器
逻辑右移:右边丢一位,左边补0
算数右移:右边丢一位,左边正数补0,负数补1
并且

int num = 10;
num>>-1;//error

是错误的,不管往哪移动,都是不能移动负数位的,左移就用<<,右移就用>>。不存在>>-1等价于<<1的说法

3、补码储存数据的原因

最后我们来说一下为什么计算机中要用补码来储存数据
计算机是一种只会加法的“笨蛋机器”,1-1=1+(-1),将减法转化为加法才能计算,若使用原码储存

【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
两者相加为2,很显然是错误的
若是我们用补码进行计算
【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换,学习编程ing,c语言,网络,服务器,visual studio,程序人生,学习方法,笔记
相加结果是33bit大小的,int只取32bit,把最左边的1给丢掉了
当然这个相加结果也是补码,最后要转化成原码,当然原码的结果是0

c语言的学习可真是任重道远啊,坚持住铁铁们文章来源地址https://www.toymoban.com/news/detail-834905.html

到了这里,关于【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【c语言操作符系列1】^(异或操作符)讲解和多种例题详解

    目录 一、^ 是什么(^称为异或) 二、^的规律(特点) 三、可利用^秒杀的常见例题(重点) 1、消失的数字  2、不一样的人生密码 3、交换两个数(不能创建中间变量) 4、找出只出现一个的两个数字 是一种操作符, 针对二进制异或而言的 ,两个数对应的二进制位相同,异或

    2024年02月16日
    浏览(56)
  • 【C语言】操作符

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员操作符 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只

    2024年01月16日
    浏览(42)
  • <C语言> 操作符

    加法(+):用于将两个操作数相加。 减法(-):用于将第一个操作数减去第二个操作数。 乘法(*):用于将两个操作数相乘。 除法(/):用于将第一个操作数除以第二个操作数。 取模(%):用于求两个操作数相除的余数。 乘法、除法和取模具有相同的优先级,高于加法

    2024年02月12日
    浏览(40)
  • linq中的操作符

    LINQ(Language Integrated Query)是一种用于.NET平台的查询语言,用于查询和操作各种数据源,如集合、数据库和XML。LINQ提供了一组标准查询操作符,用于执行各种查询操作。 LINQ(Language Integrated Query)是一种用于.NET平台的查询语言,用于查询和操作各种数据源,如集合、数据库

    2024年02月14日
    浏览(28)
  • 【C语言】操作符详解

    👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍 算术操作符 位移操作符 位操作符 赋值操作符 单目操作符 关

    2024年02月16日
    浏览(31)
  • c语言---操作符(详解)

    算术操作符: + 、- 、*、/ 、% 移位操作符: 位操作符: | ^ ` 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、= 、= 、= 、|= 、^= 单⽬操作符: !、++、–、、 、+、-、~ 、sizeof、(类型) 关系操作符: 、= 、 、= 、 == 、 != 逻辑操作符: 、|| 条件操作符: ? : 逗号表达式: , 下标引⽤: [

    2024年02月22日
    浏览(36)
  • 【C语言】操作符----详解

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 👉其他专栏:数据结构探索 💻代码仓库:江池俊的代码仓库 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 操作符分类:  💨 算术操作符  💨 移位操作符  原码、反码、补码

    2024年02月14日
    浏览(26)
  • C语言操作符例题

    感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿️ C语言例题 🐣🐓🏀 python 下面代码的结果是:( ) A.a = 8 b = 23 c = 8 B.a = 9 b = 23 c = 8 C.a = 9 b = 25 c = 8 D.a = 9 b = 24 c = 8 答案 B c=++a是先执行++a,也就是a=a+1=6(注意这

    2024年02月04日
    浏览(39)
  • C语言——操作符详解

    哈喽,大家好,今天我们来学习C语言中的各中操作符。 目录 1.操作符的分类 2.算数操作符 整数的二进制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.赋值操作符 6.单目操作符 6.1 单目操作符介绍 ~ 的用法: 6.2 sizeof 和 数组 7.关系操作符 8.逻辑操作符 9. 条件操

    2024年02月05日
    浏览(35)
  • c语言操作符(下)

    目录 ​编辑 逗号表达式 下标访问[] 函数调⽤()  sizeof 结构成员访问操作符 结构体 结构体声明 直接访问  .成员名 间接访问   结构体指针-成员名 exp1, exp2, exp3, …expN 运算规则 :从左向右依次执⾏。整个表达式的结果是 最后⼀个表达式 的结果。 如图c的值为逗号表达式中

    2024年02月19日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包