「题解」关于sizeof陷阱,无符号整形,变种水仙花数

「题解」关于sizeof陷阱,无符号整形,变种水仙花数关于 sizeof 陷阱 无符号整形 变种水仙花数 intx 1 unsignedinty 2 if xy

大家好,欢迎来到IT知识分享网。

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

sizeof陷阱以及无符号整形

让我们看一下这段代码:​​​​​​​

 int main(){ int x = -1; unsigned int y = 2; if (x > y){ printf("x is greater"); } else{     printf("y is greater"); } return 0; }

大家会认为结果是多少呢?结果会是”y is greater”?让我们看一下运行结果吧

「题解」关于sizeof陷阱,无符号整形,变种水仙花数

 为什么会出现这种结果呢,由于x是有符号数-1,内存中是全1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数,输出结果是x is greater

至于这个很大的数是偶少呢

int x=-1 原码:000000000000000000001 反码: 补码: unsigned int x=-1 补码: 没有符号则 原码等于补码: unsigned int y=2 原码:00000000000000000000000000000010 注意:此时x,y都是无符号数,二进制码的最高位不是符号位。 肉眼可见>00000000000000000000000000000010 所以x>y

还有一道题异曲同工

#include <stdio.h> int i; int main(){ i--; if (i > sizeof(i)){         printf(">\n"); } else{         printf("<\n");     } return 0; }

C语言中,0为假,非0即为真。

全局变量,没有给初始值时,编译其会默认将其初始化为0。i的初始值为0,i–结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该选择B,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,所以输出‘>’

这道题其实很隐蔽,真是虾仁猪心!!! 

注:sizeof的返回值类型实际为无符号整形,如果有符号的整形数据与无符号整形的数据比较时,无符号整形的数据自动转换为无符号整形的数据

sizeof运行规则

一般表达式的运算是在运行时执行的,而sizeof是一个编译阶段就执行的运算符,在其内的任何运算都不执行。

#include <stdio.h> int main() { int i = 1; sizeof(i++); printf("%d\n", i); return 0; } 一般表达式的运算是在运行时执行的,而sizeof是一个编译阶段就执行的运算符,在其内的任何运算都不执行 所以i++是不会计算的,++i同样也是不会计算的,所以i的值还是等于1

变种水仙花数

变种水仙花数 – Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。 

例如: 

655 = 6 * 55 + 65 * 5 

1461 = 1*461 + 14*61 + 146*1 

输入描述:无

输出描述:一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格

#include<stdio.h> #include<math.h> int main(){ for(int i=10000;i<99999;i++){ int sum=0; for(int j=1;j<=4;j++){ int a=0,b=0; a=i%(int)pow(10,j); b=i/pow(10,j); sum+=a*b; } if(i==sum){ printf("%d ",i); } } return 0; }

解题思路:

 12345 1*2345+12*345+123*45+1234*5 首先我们得这个五位数拆分成4对数据, int a=0,b=0; a=i%(int)pow(10,j); b=i/pow(10,j); 用局部变量a,b分别去保存这一对数据,用局部变量sum保存a*b的值,经历4次循环,sum累加后的值与本身这个数比较,就可以判断出是否是变种的水仙花数

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  ​​​​​​​

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/135834.html

(0)
上一篇 2025-07-01 20:10
下一篇 2025-07-01 20:20

相关推荐

发表回复

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

关注微信