- 论坛徽章:
- 0
|
原帖由 kaddmus 于 2006-9-21 19:22 发表
如果0xFFFFFFFF是int类型的话,它的值就是-1,怎么会超出int的范围呢?如果我写int a =0xFFFFFFFF,打印出a的值是-1,可见0xFFFFFFFF确实表示这个数在计算机内部的表示啊
的确,如果一个数在计算机中的内部表示是 0xFFFFFFFF,那么当它被解释为 int 类型、并且 int 类型的负数用补码来表示的时候,这个 int 数据的值是 -1。当解释为 unsigned int 类型时,是一个正数,数值大小为 0xFFFFFFFF,即十进制的 4294967295。
可见,十六进制数既可以用来描述一个数的内部表示,也可以表示一个数的大小。你在这两者上混淆了。
再强调一下:在程序中出现的整型字面量表示的是一个数的大小,是一个数值,而不是数在计算机中的内部表示。整型字面量都是非负数(除非你在数的前面人为加上负号“-”)。
在一般的 32 位系统上,数 0xFFFFFFFF (或 4294967295)已经超出了 int 类型的表示范围。因此,根据标准的规定,用它来初始化一个 int 变量的结果是未定义的。虽然很多系统上可以使这个变量的值为 -1,但这样的结果是得不到保证的。对于象 int 这样的有符号类型变量的赋值或者初始化,一定要注意给定的值要在变量的类型表示范围之内。 |
|