首页 > 编程知识 正文

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

时间:2023-05-03 17:18:50 阅读:47828 作者:1421

我们在文章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顺序移动两个位置获得1(uchar范围为0-255 ) ) ) ) ) ) )。

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

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

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

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

ps:

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

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

char,0xaa(10101010,其实这个数量也没有限制。 第一名是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、%dn '、ch1、ch2、ch3、ch4 ); printf('%x、%x、%x、%xn”、ch1、ch2、ch3、ch4 ); char ch5=-127; char ch6=126; uchar ch7=1; uchar ch8=254; printf('%d、%d、%d、%dn '、ch5、ch6、ch7、ch8 ); printf('%x、%x、%x、%xn”、ch5、ch6、ch7、ch8 );

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

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

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

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

总总结:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。