今天在知乎上看到一道关于C++的面试题:
char c=255;
unsigned short b=c;
cout<<b<<endl;
输出结果为:
在VC上运行之后得到的输出为 65535. (2^16-1)
减小 c 的值,输出的b的值也相应减少。当 c = 127(2^7-1)时 输出的b值与c一致,继续减小,输出的值与 c 值保持一致,直到为0;
增大 c 的值,输出的b值从0开始再次递增,即当c = 256时,输出为 0 ;
继续增大 c 的值,当 c 的值增大到65536时(2^16),输出的值再次为0,输出的值继续随 c 递增;
再继续增大c 的值,当 c 的值增大到4294967296时(2^32),输出的值又再次变为0,输出的值再次随 c 递增;
当将char改为 unsigned char时,
该程序段输出的结果为 255;
但继续增大 c ,c=256时,输出变为0,再继续增大后的输出与前面一致。
由此可初步得到:
char 可存 256 个数 即 8位;
short 可存 65536个数 即 16位;
long 可存 4294967296个数 即 32位;
不声明int的类型 则默认为 long型。
char 可以看做一种比short更小的整型变量。
本文探讨了C++中char、unsigned char与short类型的数值范围及溢出行为,并通过实例展示了不同类型之间的转换如何影响数值输出。

3267

被折叠的 条评论
为什么被折叠?



