返回信息流对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的 unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围的值,那么编译器将会取该值对 256 求模后的值。例如,如果试图将 336 存储到 8 位的 unsigned char 中,则实际赋值为 80,因为 80 是 336 对 256 求模后的值。
————《C++ primer 4th edition》
能理解但是还是不知道这段话实际工作机制
比如定义一个unsigned int num 然后cin >> num 将其赋值为-2我用dev-C++编译发现cout的是2,用VC2008编译结果是个随机大数...
请教大牛~这段话是如何实际工作的?
这是一条镜像帖。来源:北邮人论坛 / cpp / #26551同步于 2009/7/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C++内置类型超出数据范围
stevenlu1990
2009/7/21镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
首先,我不知道这是如何工作的~然后,不同的C++编译器实现应该是不同的~Primer里面说的可能是标准处理方法吧~
可能,可能~~~
等大牛正解~~~
我用vc6和vc9(vs2008)都是固定的大数啊。。。。。。个人理解,就是根据目标值的内存大小进行内存复制操作。比如0xABCDEF赋给一个char型,由于char型只有一个字节,因此从0xABCDEF的低位开始,复制一个字节内存给char型,为0xEF。如果是赋值给short型,,则复制两个字节,为0xCDEF。
恩,想明白了,的确是从低位开始复制给变量...
【 在 Wing 的大作中提到: 】
: 我用vc6和vc9(vs2008)都是固定的大数啊。。。。。。个人理解,就是根据目标值的内存大小进行内存复制操作。比如0xABCDEF赋给一个char型,由于char型只有一个字节,因此从0xABCDEF的低位开始,复制一个字节内存给char型,为0xEF。如果是赋值给short型,,则复制两个字节,为0xCDEF。
我的理解:
-2本身是singed int型的,在内存中的表示方式为11111111 11111111 11111111 11111101
,当被当做unsigned时,不考虑符号位,极为2^32-2,不知道是不是这样,求大牛!
【 在 stevenlu1990 的大作中提到: 】
: 对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的 unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围的值,那么编译器将会取该值对 256 求模后的值。例如,如果试图将 336 存储到 8 位的 unsigned char 中,则实际赋值为 80,因为 80 是 336 对 256 求模后的值。
: ————《C++ primer 4th edition》
: 能理解但是还是不知道这段话实际工作机制
: ...................
re
【 在 stevenlu1990 (Steven) 的大作中提到: 】
: 对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对 unsigned 类型的可能取值数目求模,然后取所得值。比如 8 位的 unsigned char,其取值范围从 0 到 255(包括 255)。如果赋给超出这个范围的值,那么编译器将会取该值对 256 求模后的值。�
: ————《C++ primer 4th edition》
: 能理解但是还是不知道这段话实际工作机制
: ...................