在做电机驱动的开发中经常会使用到正弦表法求解转子位置因此会遇到许多浮点数和负值的计算。90%的电机驱动工程师都在这里栽过跟头算着算着负数就变成没有规律的正数了为什么算出来的明明是正数输出出来又变成负数了?根本搞不清负数如何计算今天博文学长将用一个作品教会你!以下讲解均已以 8 位char类型-5 10000101为例基础知识及概念在C语言的有符号数据类型如char、int等中二进制的最高位bit7数字代表符号位最高位值为0代表正数值为1代表负数例如00000101代表阿拉伯数字510000101代表阿拉伯数字-5因为他的最高位是1计算机不直接存负数所有负数统一用补码存储而补码 反码 1这里引出源码、补码和反码的概念以 8 位 char 类型-5为例源码二进制数本身-5的源码10000101反码二进制数符号位不变其余按位取反-5的反码01111010补码反码 1-5的补码01111011注正数的反码和补码都是正数本身因此阿拉伯数字-5在计算机中实际储存的是01111011而不是10000101有符号数和无符号数解析方式及对照图//有符号数会按照有符号数规则解析无符号数会按照无符号数规则解析 char 0b11111111 -1//有符号charbit7是-1按无符号解析成负数 unsigned char 0b11111111 255;//无符号类型bit7是1也解析成正数最后考考大家最后的答案等于多少习题一#include stdio.h int main(void) { char a 5; char b -1; char c 0; c a (unsigned char)(b-a); printf(%d, c); }习题二#include stdio.h int main() { char x 3; char y -10; char z 0; z (unsigned char)(y - x) x; printf(%d\n, z); return 0; }大家在评论区给出答案