全部问题 > 当前问题

为什么刚开始a=0,经过sizeof以后输出结果就为2,后面的输出是更大的数字”


李能艳 2016-11-20 09:41:52

共 10 个回答

qqq 2016-11-20 09:44:31

额。。代码呢?

高艺超 2016-11-20 13:42:15

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

李能艳 2016-11-20 14:02:33

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

高艺超 2016-11-20 15:10:13

回复 李能艳
应该能看清吧

李能艳 2016-11-21 09:25:33

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

高艺超 2016-11-21 11:37:32

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

李能艳 2016-11-21 18:29:06

这个好复杂

李能艳 2016-11-22 15:41:40

回复 高艺超:复杂

Fiting 2016-12-31 13:01:49

回复 高艺超

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 2016-12-31 13:01:55

回复 李能艳

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


问题来自: 变量修饰符