char(int……)类型取值范围
Posted ych9527
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char(int……)类型取值范围相关的知识,希望对你有一定的参考价值。
先抛问题,为什么char的取值范围是-128-127或0-255呢?
再做解答:
概念悉知:char类型占一个字节,一个字节8个比特位。计算机中储存数字储存的是补码,正数的原返补相同;
1.当char是无符号的时:8个比特位分布为 0000 0000 为最小值0,而当8个比特位分布为 1111 1111 时为最大值即2^8-1=255;
2.当char是有符号类型时:最高比特位为符号位,因此在数值上的最大值为111 1111
即2^7-1=127; 那么,还剩下一个比特位为符号位,那不就表示 取值范围为 -127—127吗,怎么会是-128呢;
3.接下来谈谈-128的由来:
理由一:-127-127总共有255个数字,而8个比特位共有256中排列组合,在有符号类型中 0000 0000 表示数值为+0(暂且这么描述),1000 0000 表示数值为-0,那么一个0有两种表示,很显然浪费了一种排列组合1000 0000,那么多出来的位置怎么才不浪费呢? -127-127都有对应的表示了,1000 0000最高位为1表示负数,那么只能往下安排了,即(规定,规定,规定)100 0000表示-128;
理由二:定义char n= -128,-128的原码为1 1000 0000,反码为原码符号位不变,其它位按位取反1 0111 1111,补码为反码+1,1 1000 0000,将其放入n中时发生截断即 1000 0000,恰好与规定吻合;
4.验证1000 0000==128;
如图,定义一个有符号的char变量,将128赋值给它,128的二进制序列为1000 0000,输出时却是-128,即当出现1000 0000序列即默认符合规定等于-128,不再进行转换;
其余类型以此类推;
以上是关于char(int……)类型取值范围的主要内容,如果未能解决你的问题,请参考以下文章