C语言程序设计 例题 求详细解释 本人初学者 尽可能详细!!

例3.2 完全不懂撒意思 请详解!!

例3.3里
结果怎么得来的??
a=-1 ?

整型数所占字节数是4字节,即16位二进制数。根据排列组合,16位二进制数的可能取值,即表示范围是65536,就是2的16次方。
整型数又分为有符号和无符号,有符号数则可以表示负数,所以范围是[-32768, 32767],就是将65536分为负数和非负数两半;无符号则只能表示非负数,所以范围是[0, 65535]。
题中定义了无符号整型数a=65535,转化成二进制是1111 1111 1111 1111,将它以%d的形式输出,就是把它以有符号整型输出,有符号整型规定最高位的权值为负,所以把1111 1111 1111 1111转化为有符号整型就是-1,就是-2^15+2^14+2^13+2^12+…+2^0 = -1.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-08
3.2中:getchar()将键盘输入先存放入缓冲区,当按回车键时才将输入的第一个字母(虽然不太严谨——因为getchar返回的是int,但是估且这么说吧),这时c才得到输入的数据,程序流程转到putchar,将c作为char型数据输出。
3.3中:如果你看65535的二进制会发现全是1,且16进制就是0xFFFF(多少个F视int的宽度而定),计算机中整形的数据是用补码表示的,而-1的补码恰恰是0xFFFF,所以作为int输出时自然就是-1了。

有些内容记不太清楚了,特别是补码那,如果解释有误还请见谅。
第2个回答  2012-05-08
a是一个无符号的int
一般来说int最高位是符号位,1代表负数,0代表正数
a是无符号的数,所有最高位不是符号位,而被数字占据,你这数据最高位恰好就是1
所有%d输出就被认为是负数了
第3个回答  2012-05-12
看不清楚啊
相似回答