转载请标明原文地址:https://segmentfault.com/a/11...

十进制转二进制:
正整数:除2取余倒序
负整数:正整数取反+1

int = Int32 = 32位有符号整数
内存表示 8位一组 4组 4x8=32
↓首位表示正负 0 = 正 1 = 负
00000000 00000000 00000000 00000000
最多可以表示2³² = 4294967296
表示整数范围: -2147483648 ~ 2147483647 (负数比正数多1 因为0占了1个数字)

正整数转二进制:
除2取余倒序
举例:

5:
5 ÷ 2 = 2 …… 1
2 ÷ 2 = 1 …… 0
1 ÷ 2 = 0 …… 1
除2除到整数为0 把余数倒序排列 5 = 101

负整数转二进制:
正整数转二进制 取反 + 1
举例:

-5:
00000000 00000000 00000000 00000101 // 5的二进制
11111111 11111111 11111111 11111010 // 取反
11111111 11111111 11111111 11111011 // +1

??!!为什么负整数二进制要取反再加1?为什么不能直接用符号位+正整数二进制表示?
因为计算机只有加法没有减法 减法也转成加法算 为了好计算 就这样表示了 详细原因可以看下面的文章:
《为什么负数的反码在取反后还要加一》https://blog.csdn.net/delltdk...

二进制转十进制:
正数:2次幂相加

在二进制数5上 从右往左标上次方0、1、2、3……
101
²¹⁰

位数字x2的次方再相加
 1       0      1  = 1   0   1 = 101
1x2² + 0x2¹ + 1x2⁰ = 4 + 0 + 1 = 5

负数:取反加1(或减1取反 效果一样) 二次幂相加

二进制-5:
11111111 11111111 11111111 11111011 // -5
00000000 00000000 00000000 00000100 // 取反
00000000 00000000 00000000 00000101 // +1
101 = 5 加上符号 = -5

测试代码:

using UnityEngine;
using System;

/// <summary>
/// 十进制转二进制测试
/// ZhangYu 2019-04-19
/// </summary>
public class ConvertTest : MonoBehaviour {

    private static void Test() {
        // 正整数
        print(" 1 = " + Convert.ToString(1, 2));   //  1 = 00000000 00000000 00000000 00000001
        print(" 2 = " + Convert.ToString(2, 2));   //  2 = 00000000 00000000 00000000 00000010 
        print(" 3 = " + Convert.ToString(3, 2));   //  3 = 00000000 00000000 00000000 00000011 
        print(" 4 = " + Convert.ToString(4, 2));   //  4 = 00000000 00000000 00000000 00000100 
        print(" 5 = " + Convert.ToString(5, 2));   //  5 = 00000000 00000000 00000000 00000101

        // 负整数
        print("-1 = " + Convert.ToString(-1, 2));  // -1 = 11111111 11111111 11111111 11111111
        print("-2 = " + Convert.ToString(-2, 2));  // -2 = 11111111 11111111 11111111 11111110
        print("-3 = " + Convert.ToString(-3, 2));  // -3 = 11111111 11111111 11111111 11111101
        print("-4 = " + Convert.ToString(-4, 2));  // -4 = 11111111 11111111 11111111 11111100
        print("-5 = " + Convert.ToString(-5, 2));  // -5 = 11111111 11111111 11111111 11111011

        // 极值
        print(int.MaxValue + "=" + Convert.ToString(int.MaxValue, 2)); //  2147483647 = 01111111 11111111 11111111 11111111
        print(int.MinValue + "=" + Convert.ToString(int.MinValue, 2)); // -2147483648 = 10000000 00000000 00000000 00000000

    }

}

输出结果

进制转换图文教程:https://jingyan.baidu.com/art...

转载请标明原文地址:https://segmentfault.com/a/11...


冰封百度
233 声望43 粉丝

Unity游戏程序员一枚。生命不息,学习不止。