这是一个 C语言的通用问题:
數字比較應該在同一個型別上才是.
這沒有甚麼奇怪的,就是不同型別的錯誤比較而已.
引用: maychang 发表于 2022-6-11 18:54 图中已经明确表示出来了。-3是0xFFFFFFFD,作为无符号数当然大于0。
je 是 int 不是 uint
引用: wsmysyn 发表于 2022-6-11 23:27 不算奇怪,就是C语言的隐式类型转换,,对照下边的几条规则就知道为啥了。。。
非常感谢。那我遇到的这种情况是属于(5)还是(7)这种情况呢,具体发生了什么情况呢
引用: 一沙一世 发表于 2022-6-12 06:34 je 是 int 不是 uint
问题就在于 je 是 int,而 baojing2 是 uint。这在你的图片中表示得很清楚不同类型的数,不能进行比较,否则可能出错。
你如果比较图中 maxdl2 和 baojing2,就不会出错,因为这两个同是 uint类型。
引用: 一沙一世 发表于 2022-6-12 06:34 je 是 int 不是 uint
4楼说得很清楚:必须将两个数转换成同样类型,才可以进行比较。
引用: wsmysyn 发表于 2022-6-11 23:27 不算奇怪,就是C语言的隐式类型转换,,对照下边的几条规则就知道为啥了。。。
感谢。还有个问题问一下,您这图是从哪本教材上截取的,我这儿几本书上都没写这么细致。
引用: 一沙一世 发表于 2022-6-12 11:11 感谢。还有个问题问一下,您这图是从哪本教材上截取的,我这儿几本书上都没写这么细致。
不是书上的,百度一下隐式类型转换规则就行,
引用: wsmysyn 发表于 2022-6-12 12:02 不是书上的,百度一下隐式类型转换规则就行,
非常感谢。
同类型比较才有意义,不同的话,我个人理解,例如四位的 有符号就是-7-6-5-4-3-2-101234567
0000 -> 0
0111 -> 7
1111 -> -7
1010 -> -2
.......
意思是第一位是符号位
无符号数
1111 -> 15
0000 -> 0
1010 -> 10
如果你的数小一点都是正的,兴许也能比大小(我猜的),但是一旦大到符号位是1了,那恐怕不能比较了哈。所以有无符号可是差别蛮大的。不知道我说的对不对啊?