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

发布网友

我来回答

2个回答

热心网友

是的。

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,在一些底层的嵌入式编程的数据一般都是无符号的。

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

热心网友

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com