char类型的取值范围为何是-128~127,怎么算?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char类型的取值范围为何是-128~127,怎么算?相关的知识,希望对你有一定的参考价值。

1,char类型是8位,最高位是符号位,0正1负,所以01111111是127。

2,-127是10000001,而10000000换算过来就是-128。

1, “一个n位有符号int型数值,其范围为-2^(n-1) ——2^(n-1) -1”。导致此情况的根本原因是“人们解决问题时,习惯以人的思维思考问题。

2,计算机本身确实以机器的思维进行处理的”。就表现为“计算机对数据的处理其实是以‘补码’的形式,而非日常生活中人们进行数学运算所采用的‘原码’的形式”,但是,人们在对“此数值范围”进行处理的时候,却习惯性的采用了“原码作为机器码”。

3,针对“数值”计算,计算机先后采用过3种机器码——原码、反码和补码。 原码 ,最高位为符号位,其余为对应数值的绝对值的二进制数值表示。反码,最高位为符号位,正数=原码 ,负数=符号位+原码对应的其他位数取反。补码, 最高位为符号位,正数=原码 , 负数=反码+1。

4,符号位“0为+,1为-”。 因为,计算机为数据类型分配了n位,超过n位的数值会被自动舍弃,就可以发现,现在计算机系统中采用的补码,克服了“原码中存在+0和-0”的情况,仅表现为一个0。

5,8位有符号位数值的范围就成为了“-2^(8-1) ——2^(8-1) -1”,即“-128——+127”。“计算机为有符号int型数值分配固定的位数n存储数据,当数据位数大于n时,大于n的位数被自动舍弃”。这就是导致数值范围为“-2^(n-1) ——2^(n-1) -1”的原因。

参考技术A

char 类型的取值范围为何是-128~127,怎么算?

char 类型变量,以 8 位 2 进制数保存数据。

所以,可以保存 2^8 = 256 个不同的数值。

负数占一半,有 128 个,即:-1~-128。

零和正数,也是 128 个,即:0 ~+127。

综合起来,不就是:-128 ~+127 吗?

这没毛病。

C语言中怎么计算一个类型的取值范围?如 char 用程序算

首先确定字节,然后确定位,有符号的就是-2的位次方到2的位次方–1,有符号的char是8字节,它的取值范围就是-2的7次方到2的7次方再减一 参考技术A char是一个字节也就是8位二进制数字,所以一个char的取值范围是0-255
基本上都是这样计算,就是查询各个类型的位数。
参考技术B 根据char的取值范围和unsigned
char的取值范围的位数,如char和unsigned
char都是8位,char型最高位是符号位,1代表为负数,所以为-2^7-1~~+2^7-1
即-128~+127
,而unsigned
char为2^8-1=256
即0~255
参考技术C C语言中char类型占一个字节,属于有符号数,按补码进行数据存放。
如果用程序,来获取取值范围,可以设置两个变量来存储最大值和最小值,另设一个unsigned
char型变量,从一个字节的0(00000000)开始累加,直到变成255(11111111),统计其中的最大和最小值。
参考代码:
#include <stdio.h>
int main()

unsigned char i;
char min, max;
max=min=0;
for( i=0;i<255;i++ )

if ( min>(char)i ) //按有符号数进行比较
min=i;
if ( max<(char)i ) //按有符号数进行比较
max=i;

printf("min=%d max=%d\n", min, max );
return 0;

运行结果:
min=-128
max=127

以上是关于char类型的取值范围为何是-128~127,怎么算?的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么计算数据类型范围?

char类型的取值范围是

C语言中怎么计算一个类型的取值范围?如 char 用程序算

char为什么取值-128——127

Java byte 类型的取值范围是-128~127

关于c语言float取值范围