目录
🎉写在前面
unsgned是无符号,signed是有符号,如果没加unsigned或signed一般变量都是默认sigend
整型提升:有符号的高位补符号位,无符号的高位补0
%d:%d是10进制打印有符号的整数
%u:%u是10进制打印无符号的整数
🎨代码一
我们可以知道a,b都是有符号的-1,所以它们的结果一样。c是无符号的-1,在截断的时候符号位也变成数值位了。我们还知道 %d是10进制打印有符号的整数,又因为他们是char变量,就需要整型提升
进行分析
🎲代码二
这里我们要注意,%u是10进制打印无符号的整数,且a是有符号的char类型,所以存入a中需要发生截断
进行分析
🏆 代码三
我们可以发现代码三和代码二非常相识,就是将-128改成了128。我们可以发现128存入char a中的二进制和-128存入char a中的二进制一摸一样。我们猜它们的结果是不是一样呢,下面我们进行分析。
进行分析
🏐代码四
这里先是以补码的形式计算,在转化为原码,再看打印的符号
进行分析
🎄代码五
我们可以知道,i从9到0是不会变打印的,一旦它到了负数,因为i是无符号整数,所以i在转化后都是正数,这个循环会一直进行下去,%u是打印无符号的10进制,它的结果就会大变样了。
进行分析
✨ 代码六
这里我们要注意有符号的char类型的大小-128~127,strlen遇到'\0'就会停下来,'\0'的ASCII码值是0
进行分析
🎈代码七
我们注意到i是unsigned char类型的,所以它的范围是0~255,我们还要注意跳出循环的条件是i>255
进行分析
🎃总结
通过上面这些代码的案例的分析和讲解,想必大家对整型提升和unsigned signed的区分和理解已经拔高了一个层次了叭。通过这些代码,我们得明白,想要提高代码水平,我们还是要回归到实践当中 ,通过敲代码的方式直接的去感受代码,联系自己所学的知识点去理解代码,进而又加深了对知识的理解。