数值表示与位运算一点笔记
来源:百度文库 编辑:神马文学网 时间:2024/04/29 19:26:11
数值表示与位运算一点笔记
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,负数的话,移入0或1取决于所用的计算机系统。即移入0为“逻辑右移”,移入1为“算术右移”。
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,负数的话,移入0或1取决于所用的计算机系统。即移入0为“逻辑右移”,移入1为“算术右移”。
数值表示与位运算一点笔记
内存表示,位运算及字节序
内存表示,位运算及字节序 - *无名小卒* - CSDNBlog
PHP的位运算
java位运算
程序中数值的表示方法
Matrix - 与 Java 共舞 - [算法]Java中的位运算优化:位域、位图棋盘..
excel迭代?EXCEL数值运算?图文简易教程
||英语表示标点符号和运算符号||
位操作运算符优先级
java的位操作运算符
位运算技巧 大总结 - 探路者 - CSDN博客
JavaScript的表达式与运算符
数值试井与历史拟合 - 精准石油论坛
JSP2.1 Deferred Expression的一点笔记
身份证号码前6位表示的地区对照表
身份证号码前6位表示的地区的对照表
《java与模式》笔记
阻力位与支持位
阻力位与支撑位
我.关于变频器的安装和使用的一点笔记
关于变频器的安装和使用的一点笔记
NASA表示愿意与中国合作
与数字、时间有关的表示方法