有符号数与无符号数
如果数据宽度为一个字节,那么存储的数据范围就是:0-0xFF
那么这个字节里面的数据代表什么意思呢?
01010101 0x55
如果这样问的话,没有人能答出来这个数代表什么
为什么呢,如果我告诉你这里边存储的是一个文本文件,那你可能知道了,这个01010101代表的是一个逗号,那如果我告诉你这是一个程序,那你可能知道了,这代表的是一个指令,因为我们知道,在计算机中任何文件存储的都是0和1,那不同的文件0和1代表的含义肯定是不一样的,那么我告诉你这里边存储的是一个无符号的数,你告诉我他的值是多少?不同的文件有不同的编码规则
1、无符号数的编码规则
这个数是多少就是多少
比如10011010
那么这个数就是0x9A,十进制是154
2、有符号数编码规则
原码:最高位为符号位,其余各位为数值本身的绝对值
反码:
正数:反码与原码相同
负数:符号位为1,其余位对原码取反
补码:
正数:补码与原码相同
负数:符号位为1,其余位对原码取反加1
首先要确定数据的宽度
比如我们用字节(BIT)存储以下数
1,-1,-7
1 0000 0001原码
0000 0001反码
0000 0001补码
正数的补码和原码相同, 在内存中存储的方式,我可以说是原码,补码,反码都可以
-1 1000 0001原码
1111 1110反码
1111 1111补码,用16进制书写就是0xFF
所以负数是以补码的方式存储在内存中的
-7 1000 0111原码
1111 1000反码
1111 1001补码,用16进制书写就是0xF9
3、存储范围
字节(Byte)
无符号数:0-FF
有符号正数:0-FF
有符号负数:FF-80
双字(DoubleWord)
无符号数:0-FFFF
有符号正数:0-FFFF FFFF
有符号负数:FFFF FFFF-8000 0000
总结:
正数以原码存储
负数以补码存储
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)