- 论坛徽章:
- 0
|
本帖最后由 狗气球 于 2011-11-03 10:12 编辑
所以现在要重新捡起来。
L_kernel 发表于 2011-10-31 07:52 ![]()
别理会塑料袋。信他你就废了。
“举凡有符号数必补码”←没正经学C很容易有这种看法。
C标准里对于有符号数的表示给了三种方法。没说非要用补码。
For signed integer types, the bits of the object representation shall be divided into three
groups: value bits, padding bits, and the sign bit. There need not be any padding bits;
there shall be exactly one sign bit. Each bit that is a value bit shall have the same value as
the same bit in the object representation of the corresponding unsigned type (if there are
M value bits in the signed type and N in the unsigned type, then M £ N). If the sign bit
is zero, it shall not affect the resulting value. If the sign bit is one, then the value shall be
modified in one of the following ways:
— the corresponding value with sign bit 0 is negated;
— the sign bit has the value -2N ;
— the sign bit has the value 1 - 2N
从计算机处理层面上面来讲,不一样吧?
对于有符号数
1000 0000
0000 0000
L_kernel 发表于 2011-10-30 17:57 ![]()
你说的这种就是第一种情形“the corresponding value with sign bit 0 is negated;”。
虽然这种 实现 做法很罕见,也不能说就不可能。
一般你能看见的C都采用补码,属于第二种情形“the sign bit has the value -2N ;”。
***
刚写完上面这段,总觉得有啥地方不对劲。
想想,我说了“实现”俩字儿。
怎么说,实现一般都会对应到implementation。
那么就有可能让人觉得我把有符号数表示方法认为是implementation defined了。(虽然仔细推敲并没有这个意思)。
不是,真不是!{:3_203:} |
|