C语言学习——位运算

C语言学习——位运算原码反码补码介绍原码 就是前面所介绍的二进制定点表示法,即最高位为符号位,“ 0 ”表示正,“ 1 ”表示负,其余位表示数值的大小。反码 表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码 表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加 1 。补码详细介绍补码是为了表示一个负数的二进制形式。其转化方式是,先将负数当成正数,转化成二进制…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原码反码补码介绍

原码 就是前面所介绍的二进制定点表示法,即最高位为符号位,“ 0 ”表示正,“ 1 ”表示负,其余位表示数值的大小。

反码 表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码 表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加 1 。

补码详细介绍

补码是为了表示一个负数的二进制形式。
其转化方式是,先将负数当成正数,转化成二进制的形式,再将二进制正数的各个位上取反,再加上一。

例如-5
先求出5的二进制数 : 0000 0000 0101
然后将各个位上0变1,1变0 : 1111 1111 1010
最后再加1 : 1111 1111 1011

按位与(&)

运算的两个数,转换算为二进制后,进行与(&)运算。
当相应位上的数都是1时,该位取1,否则该为0。

例如5 & -5
5 : 0000 0000 0101
-5 :1111 1111 1011
答案 : 0000 0000 0001

按位或(|)

运算的两个数,转换为二进制后,进行或(|)运算。
只要相应位上存在1,那么该位就取1,如果都不为1,就为0。

还是5 | -5
0000 0000 0101
1111 1111 1011
可以看到每一位中其中一个都有1
答案 :1111 1111 1111

按位异或(^)

运算的两个数,转换成二进制数后,进行异或(^)运算
如果相应位置上的数相同,该位取0,如果不同改位取1。

5 ^ -5
0000 0000 0101
1111 1111 1011
答案: 1111 1111 1110

同时任何数异或0都是其本身,一个数如果异或自己则等于0
这样我们可以用异或来交换两个数的值

比如交换x,y的值
x ^= y; x = x ^ y
y ^= x; y = y ^ x ^ y
x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; ——— //最后一步 x ^= y 时 x = x ^ y; y = y ^ x ^ y

左移(<<)

将一个数二进制下的数向左移若干位,
比如 x << y 就是将二进制下的x 向左移 y 位

例 : 5 << 5
5 : 0000 0000 0101
5 << 5 : 0000 1010 0000
在10进制下就等于160

我们可以思考一下,在十进制中,一个数每乘一次10就向左进一位。
那么在二进制中,同10进制一样,二进制中每乘一次2就向左进一位,
那么一个数左移x 就等价于一个数乘 2x。

右移(>>)

将一个数在二进制下右移若干位
与左移用法相同

例 5 >> 2
5:0000 0000 0101
5 >> 2 : 0000 0000 0001
十进制下等于1

这里与左移类似,十进制下每除10整数位就退一位
那么右移就等价于除了几次2
同时右移运算是向下取整的

取反(~)

其实在说补码的时候,取反就已经说了,就是将取反的数在二进制下的每一位取相反的数

5 : 0000 0000 0101
~5 : 1111 1111 1010

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170962.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 知乎奇文!一本关于程序员的修真小说–分享我读到的一篇好小说

    终有一天我手中的编译器将成为我灵魂的一部分,这世界在我的眼中将被代码重构,我将看到山川无尽银河生灵都汇成二进制的数字河流,过往英雄都在我脑海眼前一一浮现,而我听到无数码农跪倒在我的程序面前呼喊。他们叫我代码之神。到那个时候,我想我一定可以找回你。一这是一个属于代码的修真世界。这世界里的每一个人,每一个东西,包括高山大海,刀剑风云,其本质都是一串数字流。打个比方,如果你知道一块石头…

    2022年4月9日
    53
  • python读取pkl_Python 读取文件

    python读取pkl_Python 读取文件使用python读取pkl文件内容可能会出现一些错误,下面将介绍一些解决的方法。importcPicklef=open(‘subj0.pkl’)#文件所在路径inf=cPickle.load(f)#读取pkl内容printinff.close()有时候,还是出现错误EOFEORROR,可以通过合并第2,3行,即:inf=cPickle.load(open(‘subj

    2025年10月12日
    7
  • oracle如何修改用户密码_oracle重置用户名密码

    oracle如何修改用户密码_oracle重置用户名密码轻松搞定Oracle用户密码修改 摘要:服务器更换、数据库移植都会涉及到Oracle用户密码的修改操作,这里给出几段简单的代码,帮您轻松搞定Oracle用户密码的修改操作。 我们假设这样一个应用场景,数据库需要移植,库中某一个用户的Oracle用户密码不知道,可是这个密码因为在其他程序中使用了而不能修改,在新的数据库系统中,这

    2022年7月28日
    13
  • NFV报告_nf检查具体怎么检查

    NFV报告_nf检查具体怎么检查1报告概述《2015年网络功能虚拟化(NFV)报告》将为读者提供关于NFV市场的发展趋势,以及目前取得进展等方面的观点。我们已经开始看到,在运营商,甚至在企业网上,越来越多的概念验证(POC)已经进行了尝试。因此目前非常重要的一件事情,就是认识到NFV对于整个网络产业所带来的巨大变化。NFV以软件的方式实现网络的功能,因此能够部署在虚拟环境,以及通用的标准硬件上。这能够满足运营商

    2025年9月1日
    11
  • idea构建maven工程_c++怎么创建工程

    idea构建maven工程_c++怎么创建工程介绍如何通过IDEA来搭建Maven聚合工程。

    2022年8月21日
    28
  • db4o的使用

    db4o的使用from:http://www.ibm.com/developerworks/cn/java/j-lo-db4o2/index.html前言在 db4o之旅 系列文章的第一部分:初识db4o 中,作者介绍了db4o的历史和现状,应用领域,以及和ORM等的比较。在这篇文章中,作者将会介绍db4o的安装、启动以及三种不同的查询方式:QBE(QuerybyEx

    2022年7月21日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号