一、负数取绝对值需要注意的地方1、以下代码char a-128; if(a0) a-a; 所以a的值会为多少a依然为-1282、如果相关函数延伸void doSetData(char setdata, char desdata) { xxx; xxx; if(setdata0) setdata-setdata; desdatasetdata; }desdata结果会依然是负数将desdata传出去后可能会对程序造成重大影响上述两个函数逻辑都会产生bug是个临界测试所以取绝对值的左边最好都定义成无符号类型的。二、无符号数和有符号数的比较1、当无符号数和有符号数进行比较时看下面例子if(ilimit)这行代码 如果不注意会产生bug实际规则会如下如果一个操作数具有一个有符号的类型T其转换等级比另一个操作数的等级高并且T足以表示另一个操作数的所有可能值则另一个操作数会被转换为T类型如T不足以表示则两个操作数都会被转换为“有符号的类型T”的无符号类型。测试常见的这类书写一定要注意所以在ifilimit中i是有符号limit又不足以表示i的所有值所以i和limit都会被装换为int的无符号类型 unsigned int所有这条语句永远不会被执行。2、有负数算术运算需要注意的地方