关于二进制以及位运算

  聊到二进制以及位运算就不得不说说,原码,反码,补码了,网上对于原码反码补码的解释过于复杂,我这里把教程里的一些总结搬出来让大家参考一下:对于有符号的而言;

  1.二进制最高位是符号位,0表示正数,1表示负数;

  2.正数的原码反码补码都一样;

  3.负数的反码等于它的原码符号位不变,其他位取反,1变0,0变1;

  4.负数的补码等于它的反码+1;

  5.0的反码补码都是0;

  6.PHP没有无符号数;

  7.在计算机运算时,都是以补码的方式来运算的;

  所以当你进行位运算时,应把变量的补码求出后进行运算之后,再转成原码得出答案;

  

  这个就是位运算的一些符号,当遇到位运算时,只需要求出数的补码根据所提供的符号进行运算得出结果;

  注意:在PHP里面没有算数左移和算数右移;

原文地址:https://www.cnblogs.com/privateWa/p/8734592.html

时间: 2024-10-05 05:04:43

关于二进制以及位运算的相关文章

二进制的位运算

二进制的位运算: 1.按位与 & 1)清零.如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零. 2)取数中指定位.取对应x位,该数的对应位为1,其余位为零.可以得到x位的指定位数. 2.按位或  | 1)常用来对一个数的某个位,置1. 3.异或运算 ^ 1)使特定位翻转,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可. 2)与0相异保留原值. 值交换的方法:1.借助第三变量来实现:C=A;A=B;B=C; 2.利用加减法实现两个变量

(九)二进制、位运算、位移运算符

JavaSE(九) --二进制.位运算.位移运算符 一.二进制简介 现代电子计算机全部采用的是二进制,因为它只使用0,1两个数字符号,简单方便.数字电路中,1代表高电平,2代表低电平.这样,数据的传输通过控制电平的高低就可以了.计算机内部处理信息,都是采用二进制数来表示的.二进制(Binary)数用0和1的两个数字及其组合来表示任何数,进位规则是"逢二进一",按从右至左的顺序,右低位,左高位. 二.二进制基础 1.所有的二进制数最高位代表符号位,0表示正数,1表示负数. 2.一个字节等

POJ 2436 二进制枚举+位运算

题意:给出n头牛的得病的种类情况,一共有m种病,要求找出最多有K种病的牛的数目: 思路:二进制枚举(得病处为1,否则为0,比如得了2 1两种病,代号就是011(十进制就是3)),首先枚举出1的个数等于k的二进制数,然后跟所有的牛的代号一一比较,符合的           +1,找出其中和最大的:就是转换2进制麻烦,用位运算就好实现了,但是位运算不是很明白含义,明白了再补充: 知识点: 3 & 2 = 2,相同为1,不同为0, 011 & 010 = 010:(怎么利用的这个特点不明白):

二进制-高效位运算

数独 数独是介绍位运算的好例子,运用位运算和不运用效率差别还是挺大的.我们先看数独需求: 1.当前数字所在行数字均含1-9,不重复 2.当前数字所在列数字均含1-9,不重复 3.当前数字所在宫(即3x3的大格)数字均含1-9,不重复(宫,如下图每个粗线内是一个宫) . 常规算法 若是我们采用常规方式的,每填写一个数字,需要检查当前行.列,宫中其他位置是否有重复数字,极端情况下需要循环27(3*9)次来进行检查,我们看下常规算法下check int check(int sp) { // 檢查同行.

Java基础之二进制的位运算介绍

前言 Java编程思想中的操作符这个章节的第一句:在最底层,Java中的数据是通过使用操作符来做的.下面我将重点介绍位运算. 算术运算 Java语言中的基本算术操作符与其他的大多数的程序设计语言是相同的.其中包括 1.加,+ 2.减,- 3.乘,* 4.除,/ 5.取模, % 位运算 1.与 & 2.或 | 3.非 ~ 4.异或 ^ 5.左移 << 6.右移 >> 7.补零右移 >>> 参考资料 Java基本运算符 :https://www.cnblogs

二进制和位运算中的异或

1.给出一个问题:给你一个整形数组,这个数组中除了一个数字仅仅出现一次外,其它数字都仅仅出现两次,求出那个仅仅出现一次的数字? 要求:时间复杂度为O(n) , 空间复杂度为O(1). 这个题目的难点在于空间复杂度的限制. 解法:一个数出现两个,两个数同样.而相等两个数异或的值为0 . 所以.我们仅仅须要把整个数组的数都异或一遍,我们就能得到仅仅出现了一次的那个数字 <span style="font-size:18px;">int get_one_num(int num[]

深入理解位运算及其用法

^ 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1.即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0按位异或的3个特点:(1) 0^0=0,0^1=1 0异或任何数=任何数(2) 1^0=1,1^1=0 1异或任何数-任何数取反(3) 任何数异或自己=把自己置0按位异或的几个常见用途:(1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算. 10100001^00000110 = 101

POJ--2570--Fiber Network【floyd+位运算】

题意:一些公司决定搭建一些光纤网络,单向的,如果从第一点到第二点,有ab两个公司可以搭建,第二点到第三点有ac两个公司可以搭建,第一点到第三点有d公司可以搭建,则第一点到第三点有a.d两个公司可以搭建,a是通过第二点,d是直接连接两点.现在给你这么一个光纤网络,问某两点之间有哪些公司可以搭建起网络. 首先这题是个多源点的,有点像最短路的思想,如果让我做我肯定硬着头皮找相同的字母,不过我看到图论书里的想法很好,就写上来了. 因为公司是用一个小写字母来标识的,且每个公司的标识互不相同,也就是说最多只

编程思想:巧用位运算重构代码

开篇 在一门编程语言中,往往会提供大量的运算符.按功能来分的话,有算术运算符.赋值运算符.关系运算符.逻辑运算符.位运算符等.这些对于大家来说都不陌生.但是,本期的主角『位运算』符相对而言是比较少去使用的.因为位运算符主要针对两个二进制数进行位运算. 巧用位运算能极大的精简代码和提高程序效率.所以,在一些优秀的开源代码中,经常能出现位运算.所以,把位运算这种思想迁移到业务代码里,有时候往往能起到柳暗花明般的重构. 位运算 在 JAVA 语言中,定义了诸多的位运算符,如下所示: 运算符 描述 &