整理一下,便于回忆
正数存储->首位表示符号位->原码存储
例如:8位int数据 int8
1->0 000 0001
负数存储->首位为符号位->原码->取反码->取补码
例如:8位int数据 int8
-1->1 000 0001->1 111 1110->1 000 0010
为何要取反码和补码?
1.方便减法运算:
如:8-3,对3先取反变为(0-3),然后直接相加变为8+(0-3),完成减法
2.计算机存储要求一一对应,如果不去取补码,将会出现-0,取补码可以解决
浮点型存储:
存储形式:
计算公式
说明:
S表示符号位。对应值s满足:n>0时,s=0; n<0时,s=1。
E表示指数位,位于S和M之间的若干位。对应值e值也可正可负。
M表示尾数位,也叫有效数字位(significand)、系数位(coefficient), 甚至被称作"小数"。
浮点型数据包括:
名字 | 位数 | 精度 | 范围 |
float | 32 | 7 | ±1.5 × 10?45 to ±3.4 × 1038 |
double | 64 | 15/16 | ±5.0 × 10 ?324 to ±1.7 × 10308 |
浮点数的精度如何得到?
答:因为浮点数只有23位(float),2^23换算成十进制有7位数字
浮点数为何损失精度?
答:因为二进制不能完整表示出某些小数
decimal数据类型
decimal 内部使用 4 个 32-bit 的 System.Int32 来存储,占用 128 bits = 16 bytes
存储结构
由 1 位符号、96 位整数以及比例因子组成,比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂,指数范围从 0 到 28。因此,Decimal 值的二进制表示形式为:((-296 到 296) / 10(0 到 28))
类型 | 位数 | 精度 | 范围 |
decimal | 128 | 28 到 29 位有效位 | ±1.0 × 10-28 到 ±7.9 × 1028 |
C#中如果希望实数被视为 decimal 类型,请使用后缀 m 或 M
问题:decimal是浮点类型吗?
其他类型,以后补充,如有错误,欢迎指正。
时间: 2024-11-04 12:55:20