关于C语言中的long long 的问题
在C语言中,有如下几个问题问一,①,signedchar②,unsignedchar③,longlong:分别是什么意思?问二,分别举个简单明了的典型的应用例子来说明,①...
在C语言中,有如下几个问题
问一,①, signed char②, unsigned char③, long long:分别是什么意思?
问二,分别举个简单明了的典型的应用例子来说明,①和②与char的区别。举个简单明了的典型的应用例子来说明 ③与long 的区别。谢谢。 展开
问一,①, signed char②, unsigned char③, long long:分别是什么意思?
问二,分别举个简单明了的典型的应用例子来说明,①和②与char的区别。举个简单明了的典型的应用例子来说明 ③与long 的区别。谢谢。 展开
1个回答
展开全部
signed char有符号字节,表示范围是-128~127,
unsigned char是无符号字节,表示范围是0~255。
long long是有符号长整形,表示范围是-2^63~2^63-1。
signed char,unsigned char都是显式声明的有符号/无符号,而char可能是二者其中之一,由编译器决定。就是说,如果你写char,有可能是signed的,也有可能是unsigned的。但是绝大多数编译器是默认为signed的。
值得注意的是,上面讲的是表示范围,但是无论是C还是C++,signed char、unsigned char、char是三种不同的类型。
出现这种情况可以归结为历史原因。早期C没有专用于算术运算的单字节整数类型,实现中也无法保证char使用什么符号(不同符号转换为超过一个字节的整数类型时各个硬件平台的效率有差异)。后来才追加signed char和unsigned char。其符号是implementation-defined。
例子:
#include <stdio.h>
int main()
{
signed char a = 255;
unsigned char b = 255;
char c = 255;
long long d = 100000000000;
long e = 100000000000;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%lld\n", d);
printf("%d\n", e);
return 0;
}
结果:
可以发现可以容纳的大小是不同的。
其中a,c,e发生了溢出,产生了不正确的结果。
追问
您是否可以编写一个程序,能真实客观的输出在不同编译器中,不同数据类型的取值范围?
例如编写一个程序,对于float 来说,在TC 中运行后,输出 float : -3.4×10^-38 ~ 3.4×10^38
同理,输入 double 等的时候,也要得到相应的取值范围。
特别注意;在不同编译器中,运行后的结果,必须是“真实客观”的。
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询