上下两部分结果不同, 很神奇吧 ?
查阅头文件发现, strlen 返回值 是 size_t 类型的, 就是 usigned long long 类型, 两者做差是不同的.
所以写程序的时候就尽量避免 减法运算, 比如比较 a-5 和 b 的大小
if ( a-5 > b ) 就尽量写成 if ( a > b+5 )
当然, 这是对于无符号类型来说
我们来打破砂锅问到底, 这里就涉及 无符号整数做差的 问题,
计算机内部运算全都是补码运算, 我们来举个例子 50 + 100
50 的二进制补码是: 00000000|00000000|00000000|00110010
100的二进制补码是: 00000000|00000000|00000000|01100100
4294967246的补码是 11111111|11111111|11111111|11001110
50 - 100, 就是 50 + (-100)
50 的二进制补码是: 00000000|00000000|00000000|00110010
100的二进制原码是: 00000000|00000000|00000000|01100100
100的二进制补码是: 11111111|11111111|11111111|10011011
-50的二进制原码是: 11111111|11111111|11111111|10010110 // 4294967190
-50的二进制补码是: 1111 1111 1111 1111 1111 1111 1100 1110 // 4294967246
ps : 正数补码是原码自身, 负数补码是 取反加一
就是这个原理,
明明 x长度是3, y长度是4, 相减却输出 yes,
就是因为 strlen 返回值是 usigned long long,
3 - 4 -> 3 +(-4)
在计算机运算中 都是补码运算 首尾的 1 并不是代表符号, 而是实际的数, 所以就是一个正数, 所以就输出了 yes