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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【《重构 改善既有代码的设计》学习笔记2】重构原则

    【《重构 改善既有代码的设计》学习笔记2】重构原则本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结!上一篇通过一个简单的例子体验了一把重构过程,现在我们需要回过头看一下重构的一些背景、原理和理论。 并思考一下重构的关键原则是什么,以及重构时需要考虑哪一些问题?一、什么是重构1、 重构的定义“重构” 这个词有两种不同的定义!名称形式重…

  • Qt编写GIF录屏工具(开源)「建议收藏」

    Qt编写GIF录屏工具(开源)「建议收藏」在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基本上都支持gif动图,一般一个5秒左右的gif,800*600分辨率,可以很好的控制在500KB内,这样就比较完美的支持各大网站上传动图。最开始使用的是ScreenGif.exe,用了很久,感觉还可以,后面一…

  • Django(70)接口版本控制

    Django(70)接口版本控制前言在RESTful规范中,有关版本的问题,用restful规范做开放接口的时候,用户请求API,系统返回数据。但是难免在系统发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。因此,改动升

  • Robotium学习

    Robotium学习Robotium是一个基于模拟点击事件的用于进行黑盒测试的android测试工具。1.AndroidJUnitAndroid自动测试沿用Java中的JUnit创建测试类的时候,继承 ActivityInstrumentationTestCase2即可。其中MainActivity为测试时进入的首个界面。由于继承于JUnit因此在s

  • Aras Innovator: 如何导入项目模板

    Aras Innovator: 如何导入项目模板在Araslabs下载内容中,有两个是ProjectTemplate数据文件,一个是APQP,一个是NPI,下载下来是xml数据。安装方法如下:1.使用nsah.aspx安装2.把模板状态升级到approved3.生成新项目计划时,可选择新增加的模板了

    2022年10月23日
  • jmeter 中 Client implementation HttpClient4和java区别实践一

    jmeter 中 Client implementation HttpClient4和java区别实践一好吧,最近还是在折腾Jmeter,在一个post请求中,发现啃爹的竟然带有特殊字符:’怎么办,直接将数据写入,如下:然后在实际用post发请求时,jmeter自动给转义了,如下:xxxx=%27qq%27%3A%2720%27&rrr=%7Bqq%27  怎么办???那就加加转义字符试试,与是,加了”\”,“\\”,“\\\”,“\\\\”都…

发表回复

您的电子邮箱地址不会被公开。

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