徐州网站建设哪家好薇,上海建设网站哪家好,百度上海分公司地址,envato wordpress toolkit二进制位的原码反码补码转换 以及 按位与、按位或|、异或^ 一、二进制位的原码、反码、补码转换1.机器数2.原码3.反码4.补码 二、按位与、按位或|、异或^ 最近在练习LeetCode上的算法题#xff0c;遇到了位运算求解的问题#xff0c;作以复习总结。 一、二进制位的… 二进制位的原码反码补码转换 以及 按位与、按位或|、异或^ 一、二进制位的原码、反码、补码转换1.机器数2.原码3.反码4.补码 二、按位与、按位或|、异或^ 最近在练习LeetCode上的算法题遇到了位运算求解的问题作以复习总结。 一、二进制位的原码、反码、补码转换 在计算机当中都是使用补码来进行计算和存储的。反码解决了正确计算负数问题补码很好的解决了反码 负数不能跨零计算的弊端并且补码还可以记录一个特殊的值 -128这个数据在 1 个字节下是没有原码和反码。 正数的原码反码补码相同 负数的原码—反码: 符号位不变其余各位取反; 负数的反码—补码: 反码加上1相当于将原码数值位取反然后在最低位加1 1.机器数
机器数一个数在计算机中的表示形式是二进制 机器数通常是带有符号的指有正数和负数之分计算机用最高位存放符号这个 bit 一般叫做符号位。 正数的符号位为 0 负数的符号位为 1。
比如十进制中的数 7 计算机字长为8位转换成二进制就是 0 0 0 0 0 1 1 1一个 byte 有 8bit有效的取值范围是 -128 ~ 127。如果是 -7 就是1 0 0 0 0 1 1 1。计算机底层使用二进制形式的补码来计算和存储数据 一个存储的二进制码分原码、反码、补码
2.原码
十进制数据的二进制表现形式就是原码原码最左边的一个数字就是符号位0为正1为负。 左边第一位为符号位其他位为数据位。 一个 byte 有 8bit最大值是 0 1 1 1 1 1 1 1(127)最小值是 1 1 1 1 1 1 1 1(-127) 在计算机中之所以使用二进制来表示原码是因为逻辑简单对于电路来说只有开或者关两种状态用二进制是在方便不过的了。
计算
使用原码对正数进行计算不会有任何问题的。 但是如果是负数的话那计算的结果就会大相径庭了。
例如 520 0 0 0 0 1 0 1 0 0 1 0-----------------0 0 0 0 0 1 1 1
结果没问题值为7.如果是负数-56 -11 0 1 1 1 0 0 0- 1-----------------1 0 1 1 0 1 1 1
显然结果不应该是-55减一之后正确的结果应该是 -571 0 1 1 1 0 0 1才对。为了解决原码不能用于计算负数的这种问题这时候反码它出现了作为负数的“计算的救星”。
计算规则是正数的反码不变和原码一致负数的反码会在原码的基础上高位的符号位不变其他位取反 1 变成 0 0 变为 1 。
3.反码
正数的反码是其本身等于原码负数的反码是符号位保持不变其余位取反。反码的存在是为了正确计算负数因为原码不能用于计算负数。
十进制数字原码反码00000 00000000 0000-01000 00001111 1111-11000 00011111 1110
负数计算 这时候我们再来使用反码计算一下 -56 - 1 的结果。
-56 的原码是1 0 1 1 1 0 0 0如果转成反码符号位不变其他位取反
那么它的反码就是1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1- 1
-----------------1 1 0 0 0 1 1 0-56 -1 -57-57 的原码是1 0 1 1 1 0 0 1转成反码刚好是1 1 0 0 0 1 1 0刚好等于刚才我们算出的值。跨零计算 不过反码也有它的 “ 软肋 ”如果是负数跨零进行计算的话计算得出的结果不对.
-3 5 来举例
-3 的原码是1 0 0 0 0 0 1 1转成反码的话就是 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 00 1 0 1
-----------------0 0 0 0 0 0 0 1
把计算结果转成十进制就是 1这结果显然不对。那么我们该怎么计算呢这时候作为反码的补充编码 —— 补码就出现了。作为反码的补充编码 —— 补码就出现了。
4.补码
正数的补码是其本身负数的补码等于其反码 1。因为反码不能解决负数跨零类似于 -6 7的问题所以补码出现了。
跨零计算 这时候我们再来使用反码计算一下 -3 5 的结果。
-3 的原码是1 0 0 0 0 0 1 1转成反码的话就是 1 1 1 1 1 1 0 0再转成补码就是1 1 1 1 1 1 0 1。 1 1 1 1 1 1 0 10 1 0 1
----------------- 0 0 0 0 0 0 1 0
结果正确。二、按位与、按位或|、异或^
运算符含义运算规则用途位与两个位都是1结果为1其他为01.判断奇偶数用if ((a 1) 0) 代替 if (a % 2 0)来判断a是不是偶数2.取余让a对16进行取余那么就可以让 a 15|位或两个位都是0结果为0其他为1^位异或同0异1相同为0不同为1交换两个数(a ^ b) ^ b a ^ (b ^ b) a ^ 0 aa^0a~位非0变11变0求相反数 ~a 1左移向左移动低位补零做 * (2 ^ n)的运算右移向右移动高位补零符号位按照原来数字的符号位不变1.做 / (2 ^ n)的运算2.求绝对值 a 31 0 ? a : (~a 1)无符号右移向右移动高位补零- 下一篇有关于位运算实际使用的介绍