越总结越成长,强制转换成char类型

我们在文章1和文章2中分析了char和uchar的取值范围和超限情况。

总结: 1、char/uchar的本质是保留的整数、1字节的整数; //字符类型实际上是将整数类型转换为ascii代码的字符。

2、char可取范围

十进制: 0到255的十六进制: 0到FF3、uchar的可能值范围

十进制:-128到127的十六进制: 80到7F4,如果char/uchar类型受限制:

口诀:高减低加(加减256,类似十进制数的加减10,即:加减循环周期)

十进制:数据超过最大上限时,减少256; 如果数据低于最小下限,则添加256; 例如:

char ch1=129; //129-256=-127; char ch2=-130; //-130 256=126; uchar ch3=257; //257-256=1; uchar ch4=-2; //-2 256=254; printf’%d、%d、%d、%d ‘、ch1、ch2、ch3、ch4 );

思路: 32位编译器:

129—–”补码) 0000000000000000000001—-剪切后的8位1000 0001,由于是char类型,最高位为1,扩展到%d

转换为源代码: 100000000000000000000000000000111111—— 127

构想2:129=1272—- “参考下图,最大数量为127,依次移动2个的位置为-127;

构想一—-130—- “补码: 1111111111111111111111111111110—- “切出后的8位0111 1110,如果最高位为0,则为%

思路2 :参考2:-130=-128-2—- “上图,最小数量、反向移动两个位置为126;

构想一: 257— “补码: 0000000000000000000000001—“切出后的8位: 000000000000000000,用于位uchar,%d,”

构想2:257=2552—- “最大数量,按255顺序移动两个位置获得1uchar范围为0-255 ) ) ) ) ) ) )。

构想一—-2—-补码: 111111111111111111111111111110—- “切后的8位: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

构想2—-2=0—-2—-“依次错开两个位置为254

char的十六进制是有限的如果考虑到十进制,则char是有限的,但实际上,该十六进制是在80-7F之间的) 10000000—-0111111,它是256个数,包括所有以0开始的数和以1开始的数printf’%d,%dn%x,%x ),ch1,ch2,ch1,ch2 );

相同的十六进制数即二进制数1010 1010 )为uchar类型分配170,为char类型分配-86。 无论给定什么值,十六进制数本身都不会改变。

ps:

在以十六进制格式打印33558www.Sina.com/uchar0xAA和char0xaa时,我们发现存在差异。 理由如下。

uchar,0xAA是正数,相当于前面都是0,所以0xAA;

char,0xaa10101010,其实这个数量也没有限制。 第一名是1,所以是负的。 因为在32位计算机上打印的整数占用4个字节,所以扩展到32位,前面是f ),这实际上是一个从短字节转换为长字节的问题。

2 ) char ch2=0xAA; %d的格式,即以十进制打印时,最终将十六进制转换为十进制,并通过“高低减法”计算最大多少进制。

3 )对于uchar/char,如果按1字节十六进制分配值,我们分配的值是什么? 用十六进制输出的话是什么? %x,无符号十六进制打印。 十六进制数与十进制符号%d/%u不同,只有符号。 因此,对于char/uchar,如果代入8位的十六进制数,则不存在超越极限。

1)

4 )对于uchar/char,以1字节的十六进制形式分配值。 照原样计算的话就是源代码。

5 ) uchar的范围从0到255共计256个,char的范围从80到7F共计256个。 与uchar相比,80到FF原本表示正数,但现在被用于表示负数。

5、uchar/char数据为十进制时,以十六进制格式输出的是补码格式。 uchar/char数据为十六进制时,保持十六进制输出。 )

char ch1=129; //129-256=-127; char ch2=-130; //-130 256=126; uchar ch3=257; //257-256=1; uchar ch4=-2; //-2 256=254; printf’%d、%d、%d、%d\n ‘、ch1、ch2、ch3、ch4 ); printf’%x、%x、%x、%x\n”、ch1、ch2、ch3、ch4 ); char ch5=-127; char ch6=126; uchar ch7=1; uchar ch8=254; printf’%d、%d、%d、%d\n ‘、ch5、ch6、ch7、ch8 ); printf’%x、%x、%x、%x\n”、ch5、ch6、ch7、ch8 );

所以,我们习惯于使用char/uchar来存储十六进制数,因为所见即所得。

1 )以十进制、十进制输出,“高低减法运算”

2 )十进制以十六进制格式输出,首先“高低相减”,然后转换为补数输出

3 )十六进制数作为十进制数输出,变换为十进制数,进行“高低减法运算”后输出

总总结:

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注