随笔分类 - 计算机原理
摘要:比如: long l1 = 4294967297; //二进制为1 00000000 00000000 00000000 00000001 float f1 = l1; var str1 = ToBinString(BitConverter.GetBytes(f1)); long l2 = (lon
阅读全文
摘要:6位是绝对有效数字。第7位有时候准确,有时候不准确。 例1 float f1 = 1234560.991f; Console.WriteLine($"{f1}"); 执行上面的代码,会输出1234561,这个例子中就是第7位数字不准。 按float转二进制步骤分析下: 1) 整数部分的二进制为: 1
阅读全文
摘要:float最大值 即float.MaxValue,二进制为:0(111 1111 0)(111 1111 1111 1111 1111 1111)。 转为10进制: 1)符号位(31位) 0,即正数 2)求出指数(23~30位) 指数=指数部分的值-127:0b1111 1110 - 127 = 2
阅读全文
摘要:以12.125 + 3.025为例: 设a = 12.125, 二进制为:01000001 01000010 00000000 00000000 Sa = 0, Ea = 1000 0010, Ma = 1.1000010 00000000 00000000 设b = 3.25,二进制为: 0100
阅读全文
摘要:float占用4字节(32位),各bit的用途 31位:符号位,正数为0,负数为1。 23~30位:(指数部分,共8位):值减掉127后,表示小数点移动位数。比如:129表示小数点左移2位,124表示小数点右移3位。值为255有特殊用途,用于表示Infinity。 0~22位:(尾数部分,共23位)
阅读全文
摘要:1) 16进制字符串 a) c#内置api byte[] bytes = BitConverter.GetBytes(123); var hexStr = BitConverter.ToString(bytes); b) 实现1 ///返回低字节顺序十六进制字符串(低字节在左侧) public st
阅读全文
摘要:代理区介绍 代理区(Surrogate)是基本多文种平面(Basic Multilingual Plane)中的一块保留区域,Unicode码范围为0xD800-0xDFFF,这个范围内的Unicode码约定了不会对应任何的字符。 其中又将0xD800-0xDBFF用于高代理,将0xDC00-0xD
阅读全文
摘要:什么是Unicode编码? Unicode是字符编码规范,它定义了所有文字的编码规则。说通俗点就是它按照某个规则给每个字符都分配了一个数字编号(比如:'A'的编号为65或0x0041,'万'的编号为19981或0x4e0d),相当于是一个编号库。这个数字编号也叫Unicode码。最开始这个编号使用2
阅读全文
摘要:原理 1) 异或运算法则:异或的两个bit相同结果为1,不同结果为02) 一个数^0还是自身, 没有任何效果,因为0^0=0, 1^0=1。例子:0b0101,1010 ^ 0b0000,0000=0b0101,10103) 单个bit^1是取反的效果,0^1=1, 1^1=0,所以一个int变量^
阅读全文
摘要:先上结论 1) 右移:左侧会使用符号位补齐,比如:对于负数,右移时左侧补1;对于正数,右移时左侧补0;2) 左移:符号位也会被左移,右侧补03) 取反:符号位也会被取反 测试代码 //有符号数 static void Print(int a) { Console.WriteLine($"{Conve
阅读全文
摘要:正数和负数的补码区别 1) 对于正数,原码和补码相同 2) 对于负数,先得到反码,再计算补码反码:除符号位外取反补码:反码+1 补码示例 1) 35原码:0010,0011补码:0010,0011 2) 18原码:0001,0010补码:0001,0010 3) -18原码:1001,0010反码:
阅读全文