为什么刚开始a=0,经过sizeof以后输出结果就为2,后面的输出是更大的数字”
李能艳 资深会员 2016-11-20 09:41:52
3162 10 0


问题来自: 变量修饰符

共 10 个回答

    qqq 资深元老 助教 2727天前

    额。。代码呢?

    高艺超 正式会员 2727天前

    你的程序呢,反正sizeof是求字节数呢,输出的肯定就不是a的值了

    李能艳 资深会员 2727天前

    回复 qqq:{unsigned short a=0 printf("%d\n",sinzeof(a)) printf("%hu\n",a–1)}就有点不懂为什么最后结果是2和65535,听着模糊

    高艺超 正式会员 2727天前

    回复 李能艳
    应该能看清吧

    李能艳 资深会员 2726天前

    回复 高艺超:等于2看懂了。你等于65535,没懂,是不是你的照片照少了

    高艺超 正式会员 2726天前

    回复 李能艳:这个要牵扯一个原码反码补码的问题

    李能艳 资深会员 2726天前

    这个好复杂

    李能艳 资深会员 2725天前

    回复 高艺超:复杂

    Fiting 资深达人 2686天前

    回复 高艺超

    printf("%d\a",sizeof(a));这里里面sizeof(a)如课件输出的是短整型无符号a的字节数,所以为2

    printf("%hu\a",a-1);这里需要输出的是无符号短整型a-1这个数,注意这里讲的不是字节数,

    由于a=0,所以a-1为-1,而-1不属于无符号短整型(0,1,2,3一直到课件中讲的32767才属于无符号短整型)。但又因为a定义的是无符号数  不能表示负数   当a初始为0  0-1=-1 超出了a的表示范围 所以是65535


    Fiting 资深达人 2686天前

    回复 李能艳

    printf("%d\a",sizeof(a));这里里面sizeof(a)如课件输出的是短整型无符号a的字节数,所以为2

    printf("%hu\a",a-1);这里需要输出的是无符号短整型a-1这个数,注意这里讲的不是字节数,

    由于a=0,所以a-1为-1,而-1不属于无符号短整型(0,1,2,3一直到课件中讲的32767才属于无符号短整型)。但又因为a定义的是无符号数  不能表示负数   当a初始为0  0-1=-1 超出了a的表示范围 所以是65535


您还没有登录,所以不能回复该问题
我要回复

  • 0

    点赞

  • 扫一扫分享朋友圈

    二维码

  • 分享

相关问题