代码熟悉整型提升与unsigned signed

布满荆棘的人生 2024-04-17 06:18 171阅读 0赞

0ab7560d05494e9b986135e33d742eba.png

?本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。

?内容专栏:这里是《C语言》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以帮到读者们哦。

?内容分享:本期会用代码提高大家对整型提升和unsigned,signed的理解,各位看官姥爷快搬好小板凳坐好叭。

?:不要998,只要一件三连,三连买不了吃亏,买不了上当(写作不易,求求了?)。

目录

?写在前面

?代码一

?代码二

? 代码三

?代码四

?代码五

✨ 代码六

?代码七

?总结


?写在前面

unsgned是无符号,signed是有符号,如果没加unsigned或signed一般变量都是默认sigend

整型提升:有符号的高位补符号位,无符号的高位补0

%d:%d是10进制打印有符号的整数

%u:%u是10进制打印无符号的整数

?代码一

dc2907a331f047bdadea0c1d86f4c66f.png

我们可以知道a,b都是有符号的-1,所以它们的结果一样。c是无符号的-1,在截断的时候符号位也变成数值位了。我们还知道 %d是10进制打印有符号的整数,又因为他们是char变量,就需要整型提升

进行分析

36892f09591442c297f903c18e30a730.png

36e98d7e5ef54f7ab30439c5481ea9fa.png

?代码二

615e2026009c4d59973fa35fa75cbc4b.png

这里我们要注意,%u是10进制打印无符号的整数,且a是有符号的char类型,所以存入a中需要发生截断

进行分析

e841b976f7be4b17a20c954179b4e58a.png

1829b301d40b407083e6b1c353251401.png

? 代码三

305b984e6c704439801bfd5c7652fdc1.png

我们可以发现代码三和代码二非常相识,就是将-128改成了128。我们可以发现128存入char a中的二进制和-128存入char a中的二进制一摸一样。我们猜它们的结果是不是一样呢,下面我们进行分析。

进行分析

6dc7120414e24d9fab3b10bcb8f0f8f6.png

10c57f4c8ea0431dadcdc39dfa82a779.png

?代码四

56cf6eead752461ea448ab45609e4b34.png

这里先是以补码的形式计算,在转化为原码,再看打印的符号

进行分析

b37b76a0cac0486ca52ae59a53da6a43.png

d939f81c8c40448bbe1408a07a5b767c.png

?代码五

c98dcf09a2964177a331c68685af1551.png

我们可以知道,i从9到0是不会变打印的,一旦它到了负数,因为i是无符号整数,所以i在转化后都是正数,这个循环会一直进行下去,%u是打印无符号的10进制,它的结果就会大变样了。

进行分析

51258dd694af43e5bd47a32d7346e632.png

✨ 代码六

15afd2aac9ef4eb89b9ff38a218ac4c1.png

这里我们要注意有符号的char类型的大小-128~127,strlen遇到’\0’就会停下来,’\0’的ASCII码值是0

进行分析

03ba9e2dbf924072b2427aab809ab05d.png

f8c8d92d58e34d92a71758fc941373ee.png

?代码七

85fc12998d6a42309a5985d66bad9deb.png

我们注意到i是unsigned char类型的,所以它的范围是0~255,我们还要注意跳出循环的条件是i>255

进行分析

81e604c868c14e30aace4d0ac2f36749.png

b8d04397ea374030823d8ac1c2a99a91.png


?总结

通过上面这些代码的案例的分析和讲解,想必大家对整型提升和unsigned signed的区分和理解已经拔高了一个层次了叭。通过这些代码,我们得明白,想要提高代码水平,我们还是要回归到实践当中 ,通过敲代码的方式直接的去感受代码,联系自己所学的知识点去理解代码,进而又加深了对知识的理解。

发表评论

表情:
评论列表 (有 0 条评论,171人围观)

还没有评论,来说两句吧...

相关阅读

    相关 提升

    何为整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个

    相关

    Go语言基础之基本数据类型 除了基本的整型,浮点型,布尔型,字符串外,还有数组,切片,结构体,函数,map,通道(channel)等,Go语言的基本类型和其他语言大同小异