关于C语言中signed char的问题。

问大家如下几个问题:
问一,
①, signed char
②, unsigned char
③, long long:
分别是什么意思?
问二,
分别举个简单明了的典型的应用例子来说明,①和②与char的区别。
举个简单明了的典型的应用例子来说明 ③与long 的区别。
谢谢。

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发生了溢出,产生了不正确的结果。

温馨提示:答案为网友推荐,仅供参考
相似回答