注册 登录
编程论坛 C++教室

《C++Primer第4版》基本内置类型问题

书中叶 发布于 2010-08-12 23:03, 871 次点击
    在《C++Primer第4版》中第二章讲了基本内置类型的问题,我有些问题搞不懂,向高人请教。
    (1)书上第31页讲
        “对于一个8位字节和32位字的机器,我们可以将存储器的字表示如下:
            736424  0 0 0 1 1 0 1 1
            736425  0 1 1 1 0 0 0 1
            736426  0 1 1 0 0 1 0 0
            736427  0 0 1 1 1 0 1 1
        在这个图中,左边是字节的地址,地址后面为字节的8位。
        如果知道地址为736425的字节类型是8位无符号整数,那么就可以知道该字节表示整数112。”
        最后一位是“1”,那么就应该说明该数是奇数,计算一下,为什么我得的是113??

    (2)“若在某机器上short类型占16位,那么可以赋值给short类型的最大数是2^15-1,即32767。”
        16位不是2字节吗?2字节不是最大到99吗?我概念糊涂了。

    (3)这个似乎是单纯的数学问题了
        “当给16位的unsigned short对象赋值100000时,赋的值是什么?”
        为什么对65536求模而不是65535?

[ 本帖最后由 书中叶 于 2010-8-12 23:08 编辑 ]
3 回复
#2
pangding2010-08-13 00:48
我也觉得是 113

二进制的16位,最大的数是 0111 1111 1111 1111,第一位是符号位,就是 32767

赋的值会被截断,求模是按2的整次方来的。65535 本来能存下的,按你的存法不就变 0 了?
其实这么理解可能更好一点,超过 16 位的被截断了。
100000 是 1 1000 0110 1010 0000 第一位上的 1 存不下,存是就是 1000 0110 1010 0000。
#3
书中叶2010-08-13 16:24
明白了,谢谢你
#4
jmjljl2010-08-18 15:06
呵呵
1