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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python初级:基础知识学习-变量、数据类型、运算符、选择结构

    python初级:基础知识学习-变量、数据类型、运算符、选择结构

    2021年9月26日
  • Java volatile关键字作用「建议收藏」

    Java volatile关键字作用「建议收藏」当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“,这里的”保证“是如何做到的?和JIT的具体编译后的CPU指令相关吧?  volatile特性  内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。  volatile的使用场景  通过关键字sychronize…

    2022年6月1日
  • 两个队列实现一个栈思路c语言_栈和队列的主要区别

    两个队列实现一个栈思路c语言_栈和队列的主要区别用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail”,“ap

    2022年8月8日
  • 数据库的第一范式,第二范式,第三范式,BCNF范式理解

    数据库的第一范式,第二范式,第三范式,BCNF范式理解第一范式属性的原子性所谓的第一范式就是数据库中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,如果出现重复的属性则需要重新构建实体,新的实体由重复的属性构成。见图分析图:在进货和销售中有两个重复的属性(数量和单价),并且进价和销售是可以再分割的,不满足原子性,即不满足第一范式,可以修改为下面的两个实体第二范式属性完…

    2022年5月24日
  • 企业局域网的组建步骤和方法

    企业局域网的组建步骤和方法什么是局域网?所谓的局域网(LocalAreaNetwork,简称LAN),用于将有限范围内(例如一个实验室、一层办公楼或者校园)的各种计算机、终端与外部设备互联成网。企业局域网怎么建立?首先来了

    2022年7月4日
  • linux中EXPORT_SYMBOL使用

    linux中EXPORT_SYMBOL使用EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static函数和变量都会自动导入到kernel空间的,都不用EXPORT_SYMBOL()做标记的。2.6就必须用EXPORT_SYMBOL()来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,

    2022年7月12日

发表回复

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

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