今天在HAL库HAL_Delay里面看到一个代码,两个uint32_t类型的数做减法,试了一下全部用uint8_t变量写的0-0xff=1,1-0xff=2.我假设了一种计算机CPU处理加减法的方式,仅仅有助计算,没有从汇编和计组角度分析。
根据C语言处理表达式时类型转化的知识,char,short运算前被转换int,0xff变成0x000000ff,这时对它取负数0x,800000ff,用补码表示(取反加一)后送给CPU的ALU的样子是0xffffff01,和0或1这样的正数的补码(本身)在ALU中直接相加得到结果后赋值左端uint8_t变量发生截取,剩下的就恰好是答案。
总结
一、运算前扩充位数
二、运算时把负号和操作数合并,将补码送给ALU直接加
三、截断