有符号和无符号字符型变量的取值范围是否是编码的范围?

如题所述

是的。

char类型一般为一个字节,范围是-128~127之间,unsignedchar无符号,范围为0~255。

有符号,最高位是符号位,如果是1代表是负数,如果为0代表为正数;无符号,最高位不是符号位,是数的一部分,无符号不可能是负数。

C语言中提供了很多整数类型(整型),主要区别在于它们取值范围的大小。int代表有符号的整数,也就是说,用int声明的变量可以是正数也可以是负数,也可以是零,但是只能是整数。

比如:inta=3;intb=0;intc=-5;以上这些都是合理的。

C语言中将基本数据类型划分为有符号和u无符号两大类。

例如,初始化变量inta=-3;其实它等价于signedinta=-3;关键字signed在这里可以省略,因为C语言默认就是有符号类型的,如果要定义无符号类型的数(也就是0和正整数)可以这样定义,unsignedintb=5;

为了说明清楚signed和unsigned的区别,首先需要了解数据在内存中是如何存储的,在计算机中所有的数据都是按照二进制进行存储的(以下假设在字长为2个字节的机器上来表示)。

举个例子来说,unsignedinta=1;变量a在内存中就是以0000000000000001来存储的,用图表的形式表示:

因为这里是unsignedint,它是无符号整型,所以的它的16位全部用来表示数据,intb=-1;

这里情况就稍微有点复杂了,注意数字1和-1在内存中的存储是完全不一样的,在计算机中,整数是以原码的形式存储的,而负数是以补码的形式存储的,原码都知道也就是它对应的二进制码,那什么是补码呢,就是原码的反码加1,反码就是原码的各位取反。

扩展资料:

无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。

比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。

在一些不可能取值为负数的时候,可以定义为unsigned,在一些底层的嵌入式编程的数据一般都是无符号的。

参考资料:百度百科-无符号整型

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
存在,char类型一般为一个字节,范围是-128~127之间,unsigned char无符号,范围为0~255追问

其取值范围与编码有没有关系

追答

编码?你的意思是assii码之类的吗?那是没有关系的,这个是编译器所规定的,现在的编译器采用的都是asscii码规范,如把char i=‘a’;那么这时候的i存储的数字就是97,无论是char,unsigned char,int。你用了assii码转换,那么97代表的就是字符a。

追问

那它的取值范围有什么意义,什么时候用到了?

追答

这是要看你使用的时候需要什么范围的数值了,不管什么类型的变量,在计算机里都是数字,这只是个灵活选择的问题。取值范围用到的话就是编程的时候你能不能清楚的认识到这个变量能满足你的要求而不产生溢出,再有估计就是考试的时候了。

本回答被提问者采纳
相似回答