返回信息流习题2.8
确定下列字面值常量的类型:
(a) –10 (b) -10u (c) -10. (d) -10e-2
【解答】
(a) int 型
(b) unsigned int 型
(c) double 型
(d) double 型
既然-10了,怎么还能说它是不带符号的呢?
能不能解释一下?
这是一条镜像帖。来源:北邮人论坛 / cpp / #73160同步于 2013/8/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
看C++Primer时遇到的一个简单习题
feihaiwuya
2013/8/11镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
【 在 Elamp 的大作中提到: 】
: 度娘了一下 貌似是表示-10的补码?
这个应该不是补码,-10u的U表示的应该是unsigned类型,
我编译运行了一下,发现会有个warning,仍然表示的是-10.
内存组织形式相同,但表达的数值则相差很远:
printf("0x%x\n", -10u);
printf("%d, %u\n", -10u, -10u);
/////////////////////////////
Result:
0xfffffff6
-10, 4294967286
【 在 feihaiwuya 的大作中提到: 】
: 这个应该不是补码,-10u的U表示的应该是unsigned类型,
: 我编译运行了一下,发现会有个warning,仍然表示的是-10.
楼主,你看看C++ Primer P32小心地雷有这么一句话:C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以如果把-1赋给8为的unsigned char,那么结果是255,因为255是-1对256求模后的值。
按照这种逻辑,-10u是把-10转换成unsigned,在windows下,unsigned int占用4位,所以-10对2^32求模后得2^32-10.
printf("%u\n", -10u);
上面输出4294967286 = 2^32 - 10
【 在 nicelee 的大作中提到: 】
: 在windows下,unsigned int占用4位
...此时我该作何表情呢...(好吧...我承认我又可耻的吐槽啦[ema7])
【 在 nicelee 的大作中提到: 】
: 楼主,你看看C++ Primer P32小心地雷有这么一句话:C++中,把负值赋给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以如果把-1赋给8为的unsigned char,那么结果是255,因为255是-1对256求模后的值。
: 按照这种逻辑,-10u是把-10转换成unsigned,在windows下,unsigned int占用4位,所以-10对2^32求模后得2^32-10.
: printf("%u\n", -10u);
: ...................
对了。。谢谢。。我忘了是这个原理了。那就应该只是个警告级别的了,不是一个错误了。
【 在 tonyjansan 的大作中提到: 】
:
: ...此时我该作何表情呢...(好吧...我承认我又可耻的吐槽啦)
哈哈,不用这么较真,,整体是对的啦。。