首页 > 试题广场 >

写出一下程序的输出是什么?

[单选题]
写出一下程序的输出
int main(){
    char num;
    for(num = 1; num < 255; )
        num += num;
    printf("%d\n", num);
    return 0;
}
  • 254
  • 255
  • 256
  • 死循环
推荐
选D
这里num值一直是0,num < 255一直是成立的,程序进入死循环
编辑于 2015-02-03 14:54:39 回复(4)
这个题目的考察初衷不是这样让num一直为0,应该是char类型的范围:下面这段程序任然是死循环。signed char 用于到不了255;除非明确给出unsigned char。
intmain(void)
{
 charnum;
 for(num = 1; num < 255; )
 num += num;
 printf("%d\n",num);
 return0;
}
发表于 2015-08-11 22:22:16 回复(2)
其实这道题想要考察的是char型的表示范围:-128~127。num永远都到不了255。
但是题中num的初值设为0,怎么自加都是0,题目变得更简单了。如果初值num=1,这道题还是死循环。
发表于 2016-04-04 23:04:34 回复(4)
char的取值范围是(-128~+127),当上一个是64的时候,下一个就变成了-128(1000 0000)了,然后再加符号位溢出就变成了0了,之后一直是0
num:2
num:4
num:8
num:16
num:32
num:64
num:-128
num:0
........



编辑于 2022-02-27 12:38:00 回复(0)
char 类型加到128时,其值为负数,一直小于255;除非定义成unsigned char 类型
发表于 2015-09-08 14:25:43 回复(1)
哦!char 8位,符号为占据一位,2的7次方等于128,所以变化范围在 -128到127之间,不会超过256
发表于 2021-12-27 12:33:10 回复(2)

  其实这道题想要考察的是char型的表示范围:-128~127。num永远都到不了255。 

  但是题中num的初值设为0,怎么自加都是0,题目变得更简单了。如果初值num=1,这道题还是死循环。 

发表于 2018-10-09 20:47:47 回复(0)
char类型变化范围在 -128到127之间,当num到127之后,下一个数的值会变为0,之后0自加,陷入死循环。
发表于 2022-02-22 11:22:56 回复(0)
需要看准for循环的是`num += num`,而num的结果一直为0,故是个死循环。

选D
发表于 2015-01-30 15:08:21 回复(2)
开始不理解的,建议跑一遍,到-128之后就是0 一直循环,char的范围-128~127 
发表于 2022-07-18 20:05:00 回复(0)
<p>C++ Primer说: &nbsp;int,short,long都是signed的; &nbsp; &nbsp; &nbsp;char可能是signed的,也可能是unsigned的;</p><p>所以char的范围由编译器决定 </p>
发表于 2020-07-07 07:47:18 回复(0)
这题考得有无符号字符有关,有符号字符加不到255,num是会变的。
发表于 2016-03-12 13:05:55 回复(0)
signed char【-128,127】1,2,4,8...64,128 128表示为10000000,最高位溢出,所以截取8位,00000000为0随后进入死循环
发表于 2024-04-18 00:05:02 回复(0)
int main(){
    char num;
    for(num = 1; num < 255; )
        num += num;
    printf("%d\n", num);
    return 0;
}
考虑到题目可能有变更,把我看到题目时的题干的代码放到开头。

在for循环内部输出num的值,依次为2、4、8、16、32、64、-128、0、0、...(PS编译器版本为

Apple clang version 14.0.3 (clang-1403.0.22.14.1)

发表于 2023-08-31 16:40:56 回复(0)
重点在char的范围,char只有8位,而num是2的次方,当num的真值是256时,char的表示转化为int,溢出,变为0,后死循环
发表于 2022-01-25 18:11:33 回复(0)
都说num一直都是0,你们确定不是1248163264-128加上去的?去跑一下程序好嘛,对人造成误会了
发表于 2022-01-08 11:35:47 回复(1)
此题与num的数据类型无关,因为num一直为0,num+=num也一直为0,所以程序一直是死循环。
发表于 2016-03-07 19:21:59 回复(0)
char型最大值是127
发表于 2024-05-17 21:27:42 回复(0)
vs:警告 C6295 for 循环定义错误: “char”值始终介于“-128”到“127”范围之间。 循环将无限执行。
发表于 2022-10-09 19:41:02 回复(0)
num的范围为[-128,127],num永远到不了255
发表于 2022-07-19 19:20:20 回复(0)
在c语言里面,char占一字节,8位,去掉一位符号位。
发表于 2022-04-21 23:00:03 回复(0)