位运算学习笔记

一、二进制

  1. 二进制的最高位是符号位:0表示正数,1表示负数
  2. 正数 的源码反码,补码,都一样
  3. 负数的反码=它的源码 符号 位不变,其它位取反(0->1,1->0)
  4. 负数的补码=它的反码+1
  5. 0的反码补码都是0
  6. php没有无符号数
  7. 在计算机 运算 的时候,都是以补码的方式来运算的

例:
-1 的源码 10000000 00000000 00000000 00000001
-1 的反码 11111111 11111111 11111111 11111110
-1 的补码 11111111 11111111 11111111 11111111

二、位运算

  1. 按位与& :两位全为1,结果为1
  2. 按位或| :两位有一个为1,结果为1
  3. 按位异或^:两位一个为0,1个为1,结果为1
  4. 按位取反~:0->1,1->0
  5. 右移>>:向右移动n次(除以2的n次方),低位溢出,并用符号位补溢出的高位,符号位不变
  6. 左移<<:向左移动n次(乘以2的n次方),低位补0,符号位不变

例&:
2&3=?
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2&3的补码 00000000 00000000 00000000 00000010(补码)

例|:
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2|3 00000000 00000000 00000000 00000011

例^:
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001

例~:
~2=?
步骤:
1.首先求出2的补码,2是整数,所以 原码=反码=补码
00000000 00000000 00000000 00000010
2.取反后,为 ?的补码
11111111 11111111 11111111 11111101
3.?的补码-1,为 ?的反码
11111111 11111111 11111111 11111100
4.?的反码取反,为 ?的值
10000000 00000000 00000000 00000011 => -3

例>>:
1>>2=?
1的补码 00000000 00000000 00000000 00000001
右移2位 00(<补位)00000000 00000000 00000000 000000(截断)01

例>>:
-1>>2=?
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
右移2位 11111111 11111111 11111111 11111111(补码)
补码-1 11111111 11111111 11111111 11111110(反码)
取反码 10000000 00000000 00000000 00000001

例<<:
1<<2=?
1的补码 00000000 00000000 00000000 00000001
左移2位 00(截断)000000 00000000 00000000 00000001(补位>)00

例<<:
-1<<2=?
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
左移2位 11111111 11111111 11111111 11111100(补码)
补码-1 11111111 11111111 11111111 11111011(反码)
取反码 10000000 00000000 00000000 00000100

echo 6&3;//2
echo "<br>";
echo 6|3;//7
echo "<br>";
echo 6^3;//5
echo "<br>";
echo ~6;//-7
echo "<br>";
echo 6>>3;//0
echo "<br>";
echo 6<<3;//48
echo "<br>";

echo -6&3;//2
echo "<br>";
echo -6|3;//-5
echo "<br>";
echo -6^3;//-7
echo "<br>";
echo ~-6;//5
echo "<br>";
echo -6>>3;//-1
echo "<br>";
echo -6<<3;//48
时间: 2024-10-18 13:20:30

位运算学习笔记的相关文章

数据的集合运算(学习笔记)

集合运算是一种二目运算符. 一共4种运算符,并,差,交,笛卡尔积 集合运算语法: 查询语句 [UNION | UNION ALL | INTERSECT|MINUS |] 查询语句 ... UNION(并集):返回查询结果的全部内容,但是重复内容不显示 UNION ALL(并集):返回查询结果的全部内容,但是重复内容显示 INTERSECT(交集):返回查询结果中的相同部分 MINUS(差集):返回查询结果中的不同部分 示例一:(UNION)并集 SELECT * FROM dept UNION

C#学习笔记-----C#枚举中的位运算权限分配

什么是位运算 常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 01 & 00 = 00; 2 01 | 00 = 01; 3 ~01 =0 0; 运用在权限设计中 先建立一个枚举表示所有的权限管理操作: 1 [Flags] 2 public enum Permissions 3 { 4 Insert = 1, 5 Delete = 2, 6 Update = 4, 7 Query = 8 8 } [Flags]表示该枚举可以支持C#位运算. 枚举的每一项值, 我们用2的n次

C语言学习笔记:16_位运算

/* * 16_位运算.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /* 位运算: * 所谓的位运算是指以二进制位为对象的运算. * c语言中位运算符有: * & 按位与 * | 按位或 * ^ 按位异或 * ~ 按位取反 * << 左移 * >> 右移 * * 除了 ~ 按位取反运算符以外,均为二目运算符. 两边的运算对象

javascript学习笔记---ECMAScript运算符(位运算符)

位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 位运算 NOT 位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一. 位运算 NOT 是三步的处理过程: 把运算数转换成 32 位数字 把二进制数转换成它的二进制反码 把二进制数转换成浮点数 例如: var iNum1 = 25; //25 等于 00000000000000000000000000011001 var iNum2 = ~iNum1; //转换为 11111111

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex

STM32学习笔记4(TIM32位定时器的实现)

关于STM32的CPU为32位,定时器却为16位的探讨 STM32的通用定时器可以实现很多功能,例如:定时计数.测量外部信号脉冲宽度.产生PWM波形.测量输入的PWM波形等.在所有这些操作中,定时器的位数主要影响两个参数,一个是定时或测量的精度,另一个是定时的时间长度.下面我们以一个列表看一下定时的精度和定时的长度有多少: 关于各个预分频器的作用请参考下图的右半部分: 从表中可以看出,在最高精度下(14ns)定时长度只有0.91ms,在精度为250ns(即4MHz)时定时长度可达16.38ms.

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使