首页 > 其他分享 >位运算

位运算

时间:2023-08-27 23:45:35浏览次数:28  
标签:0110 运算 二进制位 浮点数 运算符 按位

位运算都是对操作数在内存中的二进制位进行操作
注意:只能操作整数类型,不能操作浮点数!
因为整数在内存中表示的是自己本身的值,而浮点数却不是(IEEE745)
这种限是编译器限制的,因为对以浮点表示法的浮点数进行位运算没有数学意义

搜罗一番,只找到其一个用途,从硬件上快速支持浮点数fabs,就是数学中的绝对值。不过从语言层面,从我知道的语言当中,都是禁止

这里有办法

位运算操作符

C语言提供了六种位运算符:

按位与(&)

只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0

	1010
&	0110
-----------
	0010
10 & 6 = 2

按位或(|)

参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0

	1010
|	0110
-----------
	1110
10 | 6 = 14

按位异或(^)

参与^运算两个二进制位不同时,结果为 1,相同时结果为 0

	1010
^	0110
-----------
	1100
10 ^ 6 = 12

按位取反(~)

取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反

~	1010
----------	
	0101
~a = -(a+1) //

左移运算(<<)

左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0

<<2 10110111
-------------
  101110111
  
6 = 0110
6 << 1 = 1100 = 12
6 << 2 = 1000 = 24

左移n位就是将数乘以2的n次方

右移运算(>>)

右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1

>>2 10110111
---------------
      10110111
6 = 0110
6 >> 1 = 0011 = 3
6 >> 2 = 0001 = 1

右移n位就是将数除以2的n次方


& | ^ 满足交换律和结合律

用法

将最右侧的1翻转成0

x&(x-1)

x:			01110100
x-1:		01110011
x&(x-1):     01110000

将最右侧连续o串转化为1

x|(x-1)

x:			00101000
x-1:		00100111
x|(x-1):     00101111

将最右侧连续1串转化为0

((x|(x-1))+1)&x

x:					00101100
x-1:				00101011
((x|(x-1))+1)&x:      00100000

标签:0110,运算,二进制位,浮点数,运算符,按位
From: https://www.cnblogs.com/-37-/p/17661137.html

相关文章

  • JavaScript-比较运算符
    概述比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。2>1//true上面代码比较2是否大于1,返回true。注意,比较运算符可以比较各种类型的值,不仅仅是数值。一共提供了8个比较运算符。>大于运算符<小于运算符<=小于或等于运算符>=大于或等于运算符==......
  • 赋值运算符,自增自减运算符,关系运算符,短路逻辑运算符,三元运算符
           ......
  • 运算符和表达式
       ......
  • 类和对象(运算符重载)
    运算符重载概念:对已有的运算符重现定义,赋予其另一种功能,以适应不同的数据类型。对于内置类型,编译器知道如何进行运算。运算符重载也可以发生函数重载1.加号运算符重载作用:实现两个自定义数据类型相加的运算。1.成员函数重载+号classperson{public: //1.成员函数重载+号 person......
  • 基本运算符
    附一个Idea快捷键Ctrl+D复制当前行并粘贴到下一行......
  • JavaScript-算术运算符
    概述JavaScript共提供10个算术运算符,用来完成基本的算术运算。加法运算符:x+y减法运算符: x-y乘法运算符: x*y除法运算符:x/y指数运算符:x**y余数运算符:x%y自增运算符:++x 或者 x++自减运算符:--x 或者 x--数值运算符: +x负数值运算符:-x减法、乘法、除法运算法比较单纯......
  • Python 运算符优先级
    Python运算符优先级所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如对于表达式a+b*c,Python会先计算乘法再计算加法;b*c的结果为8,a+8的结果为24,所以d最终的值也是24。先计算*再计算+,说明*的优先级高于+。Python支持几十种运算符,被划分......
  • C++之运算符
    运算符函数在C++中会把运算符当做函数处理,一个表达式,其实可能调用了很多运算符函数来完成计算,这种特性对内建类型没有用,但是对于自建类型而言,通过设计运算符函数能够进行个性化运算,以此提高代码的可读性、易用性,例如string类Ⅰ.运算符函数的格式:'#'表示运算符,'O'表示运算符对......
  • 正负数之间取模运算
    转载自:C语言:正负数之间取模运算_ProgBelief的博客-CSDN博客,清北学堂数学笔记整理1-weijianzhen-博客园(cnblogs.com)如果%两边的操作数都为正数,则结果为正数或零;如果%两边的操作数都是负数,则结果为负数或零。C99以前,并没有规定如果操作数中有一方为负数,模除的结果会是......
  • JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)
    JavaSE(2)(简单了解idea,项目结构,运算符,数据转换,原反补码)p28idea项目结构project项目 > module模块 > package包 > class类拿微信举例,微信就是项目,它下方的四大功能(微信,通讯录,发现,我)就是模块,一个项目是包含一个或多个模块的.以第一个微信模块为例,我们......