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

news2024/11/29 8:52:10

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

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"?让我们看一下运行结果吧

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

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

int x=-1    原码:10000000000000000000000000000001
            反码:11111111111111111111111111111110
            补码:11111111111111111111111111111111
unsigned int x=-1    补码:11111111111111111111111111111111
没有符号则             原码等于补码:11111111111111111111111111111111
unsigned int y=2     原码:00000000000000000000000000000010
注意:此时x,y都是无符号数,二进制码的最高位不是符号位。
肉眼可见11111111111111111111111111111111>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累加后的值与本身这个数比较,就可以判断出是否是变种的水仙花数

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言操作符详解(下)

提示&#xff1a;本篇内容是C语言操作符详解下篇 文章目录前言八、条件表达式九、逗号表达式十、 下标引用、函数调用和结构成员1. [ ] 下标引用操作符2. ( ) 函数调用操作符3.结构成员访问操作符十一、表达式求值1. 隐式类型转换举例说明1举例说明2举例说明32.算数转换3.操作…

三子棋——【保姆级C语言小游戏】

前言&#xff1a;今天七七为大家带来的是C语言中比较简单的小游戏“三子棋” 下面跟着七七一起来学习吧&#xff01; 文章目录游戏整体思路游戏的实现流程游戏的实现菜单的打印创建与初始化棋盘玩家下棋电脑下棋判断输赢代码的整体运行游戏整体思路 我们需要三个文件&#xff…

Nginx 配置文件详细介绍

1、大致说明 Nginx 包含很多配置文件&#xff0c;但是主要配置文件是&#xff1a;/usr/local/nginx/conf/nginx.conf。去掉全部注释后&#xff0c;配置文件的主体结构为&#xff1a; worker_processes 1;events {worker_connections 1024; }http {include mime.types…

勒索病毒整体攻击态势简单分析

声明 本文是学习2018勒索病毒白皮书政企篇. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 勒索病毒整体攻击态势 2018年&#xff0c;勒索病毒攻击特点也发生了变化&#xff1a;2017年&#xff0c;勒索病毒由过去撒网式无差别攻击逐步转向以服务器定…

python(14)--集合

前言 本篇文章学习的是 python 中集合的基础知识。 集合元素的内容是不可变的&#xff0c;常见的元素有整数、浮点数、字符串、元组等。至于可变内容列表、字典、集合等不可以是集合元素。虽然集合不可以是集合的元素&#xff0c;但是集合本身是可变的&#xff0c;可以去增加或…

代码随想录算法训练营第六十四天_第十章_单调栈 | 84. 柱状图中最大的矩形

LeetCode 84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。求在该柱状图中&#xff0c;能够勾勒出来的 矩形的最大面积。 视频讲解文章讲解https://programmercarl.com/0084.%E6%9F%B1%E7%8A%…

【MyBatis】| MyBatis的缓存

目录 一&#xff1a;MyBatis的缓存 1. ⼀级缓存 2. ⼆级缓存 3. MyBatis集成第三方缓存EhCache&#xff08;了解&#xff09; 一&#xff1a;MyBatis的缓存 &#xff08;1&#xff09;缓存(cache)&#xff1a;提前把数据存放到缓存当中&#xff0c;下一次使用的时候&#x…

谷歌浏览器无法自动更新怎么办

越来越多的小伙伴选择使用谷歌浏览器&#xff0c;近期有小伙伴发现谷歌浏览器突然无法自动升级更新了&#xff0c;这是怎么回事&#xff0c;遇到这种问题应该怎么解决呢&#xff0c;下面小编就给大家详细介绍一下谷歌浏览器无法自动更新的解决方法&#xff0c;大家感兴趣的话就…

「ChatGPT」一夜之间“火爆出圈“【杞人忧天 or 未雨绸缪】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

C语言-程序环境和预处理(14.1)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段 2.2.1 预编译&#xff08;预处理&#xff09; 2.2.2 编译 2.2.3 汇编 2.2.4 链接 2.3 运行环境 写在最后&#xff1a; 1. 程序的翻译环境和执行环境 翻译环境&#xff1…

云借阅图书管理系统的测试项目实践

一、项目启动&#xff0c;介入了解需求二、需求分析三、制定测试方案&#xff08;计划 策略&#xff09;四、测试执行流程五、编写测试用例六、测试执行6.1 环境搭建6.2 准备工作6.3 执行6.4 缺陷管理七、输出测试报告八、版本发布九、项目总结一、项目启动&#xff0c;介入了…

CV【5】:Layer normalization

系列文章目录 Normalization 系列方法&#xff08;一&#xff09;&#xff1a;CV【4】&#xff1a;Batch normalization Normalization 系列方法&#xff08;二&#xff09;&#xff1a;CV【5】&#xff1a;Layer normalization 文章目录系列文章目录前言2. Layer normalizati…

【C++】多态详解

声明&#xff1a; 本节课件中的代码及解释都是在vs2013下的x86程序中&#xff0c;涉及的指针都是4bytes。如果要其他平台下&#xff0c;部分代码需要改动。比如&#xff1a;如果是x64程序&#xff0c;则需要考虑指针是8bytes问题等等 文章目录多态的概念多态的定义及实现多态的…

Javaweb之Http协议andTomcatandServelt的内容~

JavaWeb技术栈&#xff1a; B/S架构;Browser/server:浏览器/服务器架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端&#xff0c;浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源发…

2023全球市场份额排名前五的浏览器,国产的为何没上榜

数据研究机构statcounter发布了PC端浏览器在2023年1月份的最新数据统计。Chrome浏览器凭借66.39%的全球份额稳居第一&#xff0c;Edge第二&#xff0c;Safari第三&#xff0c;Firefox第四&#xff0c;Opera第五。不难看出&#xff0c;在浏览器市场全球占有率排名前5中&#xff…

LeetCode 刷题系列 -- 304. 二维区域和检索 - 矩阵不可变

给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a;计算其子矩形范围内元素的总和&#xff0c;该子矩阵的 左上角 为 (row1, col1) &#xff0c;右下角 为 (row2, col2) 。实现 NumMatrix 类&#xff1a;NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初…

我去,竟可直接用命令行操作ChatGPT

ChatGPT 确实杀疯了&#xff0c;已经有 1亿 月活用户了&#xff0c;毕竟它真的有智能的样子。 我前些年还开发过智能客服系统&#xff0c;要是早点遇到 ChatGPT&#xff0c;估计可以省了不少事。 我想接下来有许多业务场景都会使用到它&#xff0c;比如教学&#xff0c;内容创…

OpenCV-PyQT项目实战(5)项目案例01图像模糊

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

毫米波雷达人体存在感应营造更智能的生活

毫米波雷达人体存在感应的工作原理基于多普勒效应&#xff0c;精准度高、稳定性强&#xff0c;其可以穿透非金属物质&#xff0c;比如薄木板、衣服、塑料等物质。 科技改变生活&#xff0c;营造更智能化的生活&#xff0c;最重要的是能够对人体存在进行精准检测&#xff0c;人体…

Git多人协同远程开发

1. 李四&#xff08;项目负责人&#xff09;操作步骤 在github中创建远程版本库testgit将基础代码上传⾄testgit远程库远程库中基于main分⽀创建dev分⽀将 githubleaflife/testgit 共享给组员李四继续在基础代码上添加⾃⼰负责的模块内容 2. 张三、王五&#xff08;组员&…