快速十进制与二进制的互转

快速十进制与二进制的互转

正数十进制转二进制

  1. 首先记住一个大概长度的次幂表:
2^72^62^52^42^32^22^12^0
1286432168421

2. 然后将需要换算的数值进行拆分

3. 最后在对应数字上标志1,没有的标记0,有点抽象,实例一下子就懂了

例子:5 转 二进制

  1. 5 = 2^0 + 2^2
  2. 即 2^0 和 2^2 下方为 1 其余为 0
  3. 则以8位的表示则为:00000101
2^72^62^52^42^32^22^12^0
1286432168421
00000101

反推二进制就返回来就是了:

次幂下方是1的 直接相加:2^2 + 2^0 = 5

负数的二进制转换:

  1. 换算成源码,源码就是数值绝对值的二进制
  2. 反码,源码取反,也就是0变1,1变0
  3. 补码,即低位+1得到负数二进制

例子:-5 转 二进制

  1. 源码:00000101
  2. 反码:11111010
  3. 补码:11111011

所以 -5 的二进制就为 11111011

小数的二进制转换:

十进制的小数转换为二进制,主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0。注意:会存在一直小数点后不为0.

例如:十进制的0.125,要转换为二进制的小数。

  1. 小数部分0.125乘以2,得0.25,然后取整数部分0。
  2. 再将小数部分0.25乘以2,得0.5,然后取整数部分0。
  3. 再将小数部分0.5乘以2,得1,然后取整数部分1。
  4. 则得到的二进制的结果就是0.001。

异或运算 ^

相同的为0,不同的为1,满足交换律 a ^ b ^ c = c ^ a ^ b,可以用来两个数交换 a ^ b ^ a = b,a ^ b ^ b = a

int a =5,b = 6;
//5二进制:0101
//6二进制:0110  
int a ^ b = 3; // 3二进制为:0011
//例子:再不申请新的存储空间的前提实现两个数交换,根据 a ^ b ^ a = b 实现
 int num1 = 4,num2 = 5;
 num1 = num1 ^ num2;// 4^5
 mum2 = num1 ^ num2;//4^5^5 = 4
 num1 = num1 ^ num2;//4^5^4 = 5
    原文作者:MMMMMMMay
    原文地址: https://blog.csdn.net/qq_36066908/article/details/126362749
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞