首页 > 其他分享 >关于操作符的两道面试小题

关于操作符的两道面试小题

时间:2023-12-05 22:31:38浏览次数:31  
标签:count include 二进制 int 面试 操作符 main 两道

一.练习:编写代码:求一个整数存储在内存中的二进制中1的个数

  • 首先:看到这个题是首先应该想到整数在内存中存储的形式是二进制的补码
  • 其次:例如整数123,若想知道这个十进制数的个十百位都是什么,可以用123%10,或者用123/10;同理对于一个二进制数来说,若想知道它的每一位是0是1,只需让它%2或/2
  • 最后:计算1的个数

代码如下:

#include<stdio.h>
int main()
{
  int a=0;
  int count=0;
  scanf("%d",&a);
  while(a)
  {
    if(a%2==1)
      count++;
    a=a/2;
  }
  printf("%d\n",count);
}

大家可以拿个整数测验一下看看这段代码是否有问题。

这段代码是有问题的,对于正数可以使用,但对于负数束手无策,那么还有什么其他办法呢,这里就要用到我大标题的关于操作符的知识了。

#include<stdio.h>
int main()
{
  int a=0;
  scanf("%d",&a);
  int i=0;
  int count=0;
  for(i=0;i<32;i++)
  {
    if((a>>i)&1==1)
      count++;
  }
 printf("%d\n",count);
}

总结:

1.通过这个小题,我们以后再见到类似于关于某个数中有几个几的问题都应该想到操作符&,或者操作符  | 。

2.当然,这道题也不只有这一种解题方法,大家还可以仔细想想别的,欢迎留言评论

二.将二进制为1011的数改为二进制为1111的数之后再改回去

大家可以先尝试写写,还是往操作符上去想

先写1011改为1111:

#include<stdio.h>
int main()
{
  int a=11;
  int b=a|(1<<2);
  printf("%d",b);
}

再写1111改为1011:

#include<stdio.h>
int main()
{
  int a=15;
  int b=0;
  b=1&(~(1<<2));
  printf("%d\n",b);
}

注:~这个操作符的意思是按位取反

总结:操作符一般与这两类题型有关:

  • 1.剥离二进制数
  • 2.改整数所在内存中存储的二进制数















标签:count,include,二进制,int,面试,操作符,main,两道
From: https://blog.51cto.com/u_16351083/8696257

相关文章

  • 面试高频:双指针---6题14图一次搞懂
    使用双指针是降低算法复杂度的一个有效途径,有些问题的暴力解法时间复杂度是O(n^2),但使用双指针可以大幅度降低算法复杂度。如果面试者能将求解过程从暴力法优化到双指针,说明面试者的基础知识、代码能力、逻辑思维都是十分扎实的。同贪心算法一样,双指针的难点在于自己想不出、别人......
  • Java面试高频八股文
    一、Java基础(一)1.面向对象和面向过程的区别面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题;面向对象会先抽象出对象,然后用对象执行方法的方式解决问题;面向对象开发的程序一般更易维护、易复用、易扩展;    2.基本类型与包装类①Java中的几种......
  • 【C语言总集篇】操作符篇——从不会到会的过程
    前言大家好,很高兴又和大家见面了!现在我们以及结束了数组与函数知识板块的学习,今天我们将进入下一个板块——操作符板块的学习,下面开始介绍我们今天的内容吧。一、操作符分类算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函......
  • #yyds干货盘点# LeetCode程序员面试金典:完美数
    题目对于一个正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为「完美数」。给定一个整数n,如果是完美数,返回true;否则返回false。 示例1:输入:num=28输出:true解释:28=1+2+4+7+141,2,4,7,和14是28的所有正因子。示例2:输入:num=7......
  • 记录--前端实习生的这个 bug 被用做了一道基础面试题
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言测试发现了一个问题,简单描述问题就是通过函数删除一个数组中多个元素,传入的参数是一个数组索引。然后发现实际效果有时删除的不是想要的内容。具体 Bug 代码实现:constarr=[1,2,3,4,5,6,7];constrem......
  • 京东面试:说说Cookie、Session和Token的区别?
    东子作为目前传统电商三巨头之一(其他还有阿里巴巴和拼多多),其面试题的难度也中规中矩,总体来说没有其他两家面试难度高,当然薪资也没有其他两家薪资高。其中拼多多的薪资最为离谱,尤其是前几年,听说挖同行的开发人员,薪资可以开到原来薪资的两到三倍,真是变态(但是我喜欢)。东子的面试题......
  • 代码随想录算法训练营第4天 | lc24、lc19、lc面试题02.07、lc142
    (本合集全部为Go语言实现)相关文章链接:24题解19题解02.07题解142题解相关视频链接:Leetcode24状态:秒了实现过程中的难点:对组内两个节点的指针指向流转需要倒腾明白。临时头结点真的很有用个人写法funcswapPairs(head*ListNode)*ListNode{tmpHead:=&ListNode{-......
  • 【面试攻略】Oracle中blob和clob的区别及查询修改方法
    大家好,我是小米,欢迎来到小米的技术小屋!今天我们要一起来聊聊一个在面试中常常被问到的问题——“Oracle中Blob和Clob有啥区别,在代码中怎么查询和修改这两个类型的字段里的内容?”别急,跟着小米一步步揭开这个技术的神秘面纱!Blob和Clob是什么?首先,让我们来了解一下Blob和Clob是什么。......
  • C# 面试常见递归算法
    前言今天我们主要总结一下C#面试中常见递归算法。C#递归算法计算阶乘的方法一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。原理:亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定......
  • 《力扣面试150题》题单拓展——回溯
    《力扣面试150题》题单拓展——回溯1.基础知识voidfind(string&s,inti,string&path){//终止条件 if(i==s.size()){ans.push_back(path);return;}for(intk=0;k<index[sub].size();k++){//处理一层path.push_bac......