8位有符号类型的数值范围是-128~127,why -128?

8bit无符号数范围为:0 ~ 255,这是没有什么疑问的。
8bit有符号数范围为:-128 ~ 127 ,然而直观来看,0000 0001即为1,1000 0001即为-1,那么很容易得到8位有符号数值的表示范围应该是1111 1111 ~ 0111 1111,也就是-127~127,那么-128怎么来的呢?(这其实是从原码的角度看的)

原码:是一种计算机中对数字的二进制定点表示方法,平时正常用的二进制表示法。

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与其原码相同;负数的补码等于其反码+1。

如果直接进行原码运算,例如1+(-1)=0,运算的时候0000 0001 + 1000 0001 = 1000 0010(-2),很显然是错误的,因此符号位和数值位必须分开处理!这会增加计算机的硬件开销。那如果换成补码,1的原码,反码,补码均为0000 0001(正数三者一致);-1的原码1000 0001,反码1111 1110,补码1111 1111(1111 1110 + 0000 0001);因此1+(-1)用补码来运算就是0000 0001 + 1111 11111 = 0000 0000(最高位溢出舍弃),结果是正确的。

由此可见,可以将减法运算转化成加法运算,计算机只需要实现加法电路即可,并且原码到补码的转换和补码到原码的转换过程是完全一致的,为什么?可以简单证明如下:

假设32位机器,X为负数(最高位是符号位,对于负数,即为1),则有X(绝对值)+X(反)=0xFFFFFFFFF,因此X(绝对值)+X(反)+1=0xFFFFFFFFF+1=0;所以得到0-X(绝对值)=X(反)+1,根据之前的定义X(反)+1即为X的补码,于是有X(补)=X(反)+1=0-X(绝对值);

1)那么对于A、B>0,令K=-B,显然K是负数,那么有A-B=A+(0-K(绝对值))=A+K(补),减法运算就转化成了加法运算。

2)X(绝对值)=0-X(补);两边同时乘以-1
得到-X(绝对值)=-0-(-X(补))=0-(X(补(绝对值)))=X(补)(反)+1;-X(绝对值)即为原码X;因此上式说明了原码X等于X的补码取反后加一,也就是说X补码的补码就是原码。不论是原码求补码还是补码求原码方式完全一致。

  1. 减法运算可以视为加一个负数,二进制运算变为加这个负数的补码。(减一实际为加负一的补码)
  2. 一个负数补码的补码是源码。

回到最开始的问题,8位有符号数值的最小值为什么是-128而不是-127呢,我们列出来部分原码、反码和补码的对照表看看:
在这里插入图片描述
从上表中我们可以看出,0在原码和反码中有两种表示方式,而对应的补码只有一种表示方式,-128在原码和反码中无法表示,在补码中却可以表示(用-127的补码1000 0001减1得到1000 0000)。而计算机中数值以补码形式存储和运算,当然-128可以表示出来,因此8位有符号数值的范围是-128~127,同理其他位数(16、32、64)也可以以此类推。

转载于:
链接:https://www.jianshu.com/p/0ad27ad30a43
来源:简书

### 原因分析 许可证管理器错误 -8通常发生在MATLAB尝试验证其许可时遇到问题的情况下。此错误可能由多种因素引起,包括但不限于: - **许可证文件配置不当**:如果`license_standalone.lic`文件中的主机ID(Host ID)与实际机器不符,则可能导致该错误[^4]。 - **动态变化的硬件特征码**:某些情况下,系统的网络适配器MAC地址或其他唯一标识符可能会发生变化,这会影响基于这些信息生成的主机ID的一致性[^1]。 ### 解决方案 #### 方法一:修正许可证文件中的主机ID 对于独立版许可证用户而言,确保使用的`.lic`文件内所记录的主机ID准确无误至关重要。可以通过以下步骤来解决问题: 1. 获取当前计算机的真实主机ID; 2. 编辑现有的`license_standalone.lic`文件,将其内部定义的HOST_ID字段更新为最新的值; 3. 将修改后的许可证文件放置于MATLAB安装目录下的`licenses`子文件夹中; ```bash # 示例命令用于显示Linux系统上的网卡信息,从中获取MAC地址作为hostid的一部分 ifconfig | grep ether ``` #### 方法二:调整DLL库实现绕过检测机制 当上述常规手段无法奏效时,可以考虑采用更为激进的技术措施——通过替换特定的动态链接库(`dll`)文件来规避潜在的安全检查逻辑。具体操作如下所示: -至MATLAB根目录`\bin\win64\matlab_startup_plugins\lmgrimpl\`置处寻找名为`libmwlmgrimpl.dll`的目标文件; - 备份原文件并对其进行重命名处理,例如附加日期戳记形成新的名称如`libmwlmgrimpl.dll0721`以便日后恢复使用[^3]; 这种方法虽然有效但也存在一定风险,建议谨慎行事并在充分了解后果后再做决定。 #### 方法三:利用破解补丁完成激活流程 针对部分版本的MATLAB软件包,存在专门设计用来辅助非法授权过程的小型程序集或脚本集合。按照官方文档之外的方式进行产品注册虽违反服务条款但仍被一些使用者采纳作为一种应急策略。执行此类操作前务必确认合法性以及安全性影响[^5]。 > 注意事项:以上提到的方法特别是最后两种涉及到了未经授权的操作,在正式环境中强烈推荐遵循MathWorks公司提供的合法途径来进行故障排查和修复工作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值