数值表示与位运算一点笔记

原创 2005年05月07日 00:38:00

 

1,  存储器由若干“字节”byte单元组成。而每个字节都有一个地址,当然这个地址是物理排序的,怎么说呢?好比就是从0开始刻出的标尺一样的刻度位置,所以地址是物理固定的;我们说的改变地址,其实改变的不是地址,而是地址里面的内容。字节则是由若干个二进制位bit组成的。而若干个字节组成一个存储单元(比如4个字节可以存储Int整数的单元),叫做“字”(word)。在每一个存储一个数据或者一个指令(所谓的32位,64位指令系统)。另外,一个字节由8个二进制位组成,最右边的一位是“最低位”,最左边的一位是“最高位”,每个位上的值是0或者1。比如ox10000001表现了这个高位序列。

2,  表示数值的方法:原码,反码和补码。

1)  原码。最高位是符号位(0表示正,1表示负),其他各位表示数值本身的绝对值。注意小谭说,+0和-0表示的不是同一个0,在内存中有两个表示,所以0不适合计算机的运算。有个问题,在我们编程中经常用到比较(如:value == 0 )这样的表达式,经过实践的检验是正确可行的,我测试了一下,正0和负0都表示成了同一个值。怎么证明小谭的说法,请大家指点。

2)  反码。若一个值是正,其反码和原码是一样的;若为负,则符号位为1,其余各位是对原码取反。

3)  补码。原码和反码不适合计算机内运算,因为要单独处理其符号。补码规则:对整数,原码、反码、补码相同;对负数,最高位为1,其余各位取原码的反,然后对整个数加1

4)  总结:这些数值表示,在我编程过程中从来没有考虑和体验过,一定是我太菜的缘故。

3,  位运算。运算量只能是整数或者字符型,不能为实数等其他类型。

1)  & 按位与:两个相应位都位1,则为1,否则为0。特殊用途

l         清零。找一个数满足原来的数中为1的位在新数中对应0条件即可。

l         取一个数的指定位。比如高位或者低位,将所取的位对应1,其他位对应0

2)   |按位或:两个相应位只要有一个为1,该位结果为1。作用主要是对一个数据某些位定位为1

3)   ^ 按位异或:参加运算的两个相应位同号,则为0;异号则为1。注意

l         特定位翻转。构造的数在特定位上取1,其余位取0

l         0^,则是保留原值。

l         交换两个值,不用临时变量。a = a ^b; b=b^a;a=a^b

4)   ~ 取反:对二进制按位取反,注意其优先级特别高

5)   <<  左移:左移一位相当于该数乘以2,两位乘以4,改规则只适合在左翼中溢出的被舍弃的高位不含1的情况。

6)   >> 右移:就好理解了,但是要注意符号位问题。

l         无符号数,右移在左边高位移入0

l         有符号数,整数的话移入0,负数的话,移入01取决于所用的计算机系统。即移入0为“逻辑右移”,移入1为“算术右移”。

位运算(2)-- 集合中的位运算

一、基本概念当集合元素个数较少时,可以用二进制来表示。集合{0, 1, ..., n - 1}的子集S可以用如下方法编码成整数: f(S)=∑i∈S2if(S) = \sum_{i \in S}{2...
  • xushao_Movens
  • xushao_Movens
  • 2016年08月13日 14:24
  • 475

位运算-加法运算、交换两个数值

前面的引言部分是写在前面的胡说八道,了解题目的话可以直接跳过此部分查看正文。引言这个问题的来源是http://www.lintcode.com/上的编号第一的面试题目,涉及到二进制位运算,很有意思。并...
  • surp2011
  • surp2011
  • 2016年04月14日 10:52
  • 1536

C/C++语言中计算int,float,double,char四种数据类型所能表示的数据范围

char        1字节   short       2字节   int         4字节   long        4字节   long long   8字节   float     ...
  • wordwarwordwar
  • wordwarwordwar
  • 2016年09月16日 23:15
  • 539

整数数据类型表示范围与位运算

前言 本文仅讨论Java中整数数据类型byte、short、int、long,boolean、char、float、double不在讨论之列。因为浮点数极少用到位运算,boolean类型极少用来进行数...
  • sddxqlrjxr
  • sddxqlrjxr
  • 2016年06月01日 20:39
  • 2826

位运算(&、|、^)与逻辑运算(&&、 ||)区别

刚无意在一篇文章中看到了位运算(&、|)和逻辑运算(&&、||)的介绍,想起了自己薄弱的基础知识,于是百度了几把总结了下。         首先从概念上区分下,位运算是将运算符两边的数字换算成二进制...
  • liu251890347
  • liu251890347
  • 2014年09月17日 10:04
  • 6975

位运算实现加减乘除运算

我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平。无论多么复杂的逻辑、庞大的数据、酷炫的界面,最终体现在计算机最底层都只...
  • YPJMFC
  • YPJMFC
  • 2017年10月16日 10:20
  • 181

几个简单有用的位运算

这个是我摘自一个大佬的状压DP中的,不忍修改,摘来留做以后复习吧,望那位大佬不介意 原文链接:请戳我 状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP...
  • look_poet_of_water
  • look_poet_of_water
  • 2018年01月29日 18:02
  • 8

剑指offer——数值的整数次方(好题,位运算运用,临界值考虑)

面11背景知识: 变量命名问题:面试时编写代码使用的变量名,尽量能根据变量的作用来命名。下划线的使用也是关键。 代码的完整性:功能测试,边界测试(边界值是否正确),负面测试(错误输入) ...
  • qqqqq1993qqqqq
  • qqqqq1993qqqqq
  • 2017年06月11日 16:31
  • 127

使用“位运算”实现“四则运算”之加减乘除

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。    位运算实现加法: [cpp] view plain copy int AddWithoutAr...
  • Harrytsz
  • Harrytsz
  • 2017年06月13日 14:33
  • 424

数值溢出运算

char chr=127; int sum=100; chr+=1; sum+=chr; chr是char类型,共八位。赋值127。8位为0111 1111。 此时若用%d格式打印出来时,规...
  • chenhuijie666
  • chenhuijie666
  • 2012年07月25日 22:12
  • 1099
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数值表示与位运算一点笔记
举报原因:
原因补充:

(最多只允许输入30个字)