[关闭]
@CrazyHenry 2018-01-23T13:14:16.000000Z 字数 475 阅读 1317

2.x 同时包含有/无符号类型的表达式

ccccC++Primer


image_1btt670eu18tj1ket3jdekio9137.png-54.2kB
有符号数会转换为无符号数,表达式的返回值也一定是无符号数,所以就算是计算结果为负,也会将此结果转换为无符号的结果(取模)。归根结底,是不同类型的对象对数据的读取方式不同,按某种方式读取内存的比特。

无符号 - 有符号的时候,有符号数先转换为无符号数,然后再按照无符号数的规则计算减法,返回无符号数,最后结果也按无符号数的读取方式输出。比如:30-(-20),假如是模80,那么-20先转换为60,30-60=-30,-30按无符号读出,就是50了。与实际上算30-(-20)结果一样。

实际上,无论加法还是减法,最终结果为正即为正确结果,为负则需要取模。

image_1btt75t5d3s71d0m1c16132c11sb3k.png-31.4kB

image_1btt77g8o1rk31acmqk01sd71orr4h.png-94.2kB

可见,有符号和无符号混用并不好:

image_1btt7bfb014u61van53n16mk1ip74u.png-153.1kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注