8.11每日一练(整形提升,左移操作符,最大连续 1 的个数,完全数计算)

目录

 选择题部分

第一题

​编辑

第二题

第三题

第四题,下面函数的输出结果

第五题

 编程题部分

 力扣485  最大连续1的个数

牛客网 HJ56 完全数计算


 选择题部分

第一题

知识点  整形提升

这里的结果类型是随着值的级别上升,而上升的,由右图得知

由上往下,级别上升的,所以本题答案就为D  double类型了

第二题

知识点  无符号整形  整型提升

这道题涉及到了整型提升了,unsigned int类型变量在和Int 类型变量比较的时候,int类型变量会整型提升为unsigned Int

会导致在比较x>y的时候x的值发生改变,是因为x变成了无符号整形了

-1 原码是1000 0001  补码就是1111 1111了  不同的类型,提取出来就会是不一样的数值,x和y比较,它们的类型就要相等,由于y是无符号整形,所以提取x(-1)补码出来进行整型提升,而我们知道无符号整形是没有正负的,这也就意味着原码,反码,补码是相等的

这样无符号整形x就是1111 1111了,为4294967295,2的32次方,答案为A了  X更大,但是我们要记住,这并没有改变X的值,这是因为不同的类型,提取出来就会是不一样的数值,补码没有改变的。。换言之无符号整形是没有负数的

第三题

知识点(无符号整形)

 本题选B,因为w是无符号整形,所以并不存在负数形式的,而表达式中w+=-20是w=w-20;这会导致w为负数,可是w是无符号整型,所以这D选项是不符合C语言语法的。

第四题,下面函数的输出结果

知识点,移位操作符理解,原码补码

答案是选C  -2    .1的补码是0000 0001,向左移31位就是1000 0000,然后取反+1,就到了11111111

等于-2147483648,取反+1获得补码1000 0001,右移31位就是1111 1111,移去的补符号位1,取反+1获得原码1000 0001    (这里为了方便,简化了一下,改成了16进制)

是-1,我们再1^-1,就等于-2了     因为1^1=0  1^0=1  0^1=0  0^0=0   

第五题

 

sizeof不是一个函数,他是一个操作符,是可以咱编译期间就完成的,直接就是4了,运行不用执行i++这个操作,所以i不变,为1。

 编程题部分

 力扣485  最大连续1的个数

读题目,二进制数组nums,计算最大连续1的个数

我们得到,这需要去遍历这个数组,去寻找连续1的个数,所以我们呢,需要创建count来记录当前连续1的个数,还需要建立sum来记录最大连续1的个数,这两个count和sum需要区分的,不能混为一谈   

int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    int i;
    int sum=0;
    int count=0;
    for(i=0;i<numsSize;i++)
    {
        if(nums[i]==1)
        {
            sum++;
        }
        else
        {
           
            sum=0;
        }
         if(sum>count)
            {
                count=sum;
            }
    }
    return count;
}

牛客网 HJ56 完全数计算

 遍历呗,通过两层for循环找到的因数,再相加就可以,再去比较就ok了,比较简单的

/*
直接穷举计算,注意,1不算完全数,一直遍历到当前数的一半即可。
*/
#include<stdio.h>
int main(){
    int n = 0;
    int count = 0;
    scanf("%d",&n);
    for(int j = 2; j <=n; j++){
        int sum = 1;
        for(int i = 2; i <= j/2; i++){
            if(j%i==0){
                sum = sum + i;
            }
        }
        if(sum==j) count++;
    }
    printf("%d",count);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

----K1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值