关于位运算的错误问题
位运算有这样一个例题:
编写一个函数,输出16位数据的第4位和第10位。
初期我尝试了使用以下的代码,但是发现并不能够正常运行:
#include <stdio.h>
#include <stdlib.h>int main()
{unsigned int num1,num2;printf("please input a number:\n");scanf("%d",&num1);num2=num1;num1<<=3;num1>>=15;printf("the forth is %d\n",num1);num2<<=9;printf("%d\n",num2);num2>>=15;printf("the tenth is %d\n",num2);
}
----------------运行结果如下
please input a number:
1754 //转换为二进制为0000 0110 1101 1010
the forth is 0
898048 //转换为二进制为1101 1011 0100 0000 (二进制)
the tenth is 27 //此处向右移动15个应该是0000 0000 0000 0001,但是却传出了1011
Program ended with exit code: 0
在不停的调试过程中发现一直无法解决该问题,甚至按照书上一模一样的代码依然存在问题,调试巧合间发现可能是长短整形问题,于是换为以下代码(长换短):
#include <stdio.h>
#include <stdlib.h>int main()
{unsigned short int num1,num2;printf("please input a number:\n");scanf("%hu",&num1);num2=num1;num1<<=3;num1>>=15;printf("the forth is %hu\n",num1);num2<<=9;printf("%hu\n",num2);num2>>=15;printf("the tenth is %hu\n",num2);
}
--------------运行结果如下:
please input a number:
1754
the forth is 0
46080
the tenth is 1
Program ended with exit code: 0
此时便可以成功,于是深入研究发现,这个算法必须用短整型才是16位数,才能使用左移右移的方式删去不需要数字达到程序目的,用标准整型会出现保留情况。
关于位运算的错误问题相关推荐
- 【位运算】起床困难综合症(包含错误思路点拨)
原题 解题思路一(错误): 顺着做(每个数用数组存)的思路是人脑思路,但是电脑会TLE.我们可以反着来. 大概的思路就是先假设一个最终结果的最大值. 然后问电脑:这数运算回去(按照输入的门的顺序,逆着 ...
- 技术图文:位运算技术在求解算法题中的应用
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第一篇图文. 在总结这篇图文的时候,顺便把遇到的坑写了两篇辅助的图文,大家可以参考一下: 有符号整型的数据范围为什么负数比正数 ...
- 为什么地磅的读数有进制么_谈谈二进制(三)——位运算及其应用
0. 概要 前两篇文章我们了解了二进制的基本原理(谈谈二进制(一))以及二进制的四则运算(谈谈二进制(二)),本篇我们一起来看看二进制的位运算.先来看一下有哪些位运算: 上表中列出了我们编程语言中的所 ...
- java 枚举 或运算_Objective-C 枚举 中位运算 的使用
前言 Enum,也就是枚举,从C语言开始就有了,C++.Java.Objective-C.Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个--规范的定义代码中的状态. ...
- php使用位运算来实现日留存的算法
文章目录 一.前言 二.位运算实现逻辑 1.逻辑部分如下 2.存入数据库部分的代码 3.查询数据库示例 4.php读取字段,并用位与运算解开存留信息 三.偶然发现的bug(php大数计算问题) 1.科 ...
- 关于longlong与位运算
数据规模: int: -(2^31-1) ~ +(2^31-1) long long:-(2^63-1) ~ +(2^63-1) 由于默认的数字都是int型,所以在做乘法运算时会很容易想到int的溢出 ...
- [Leedcode][JAVA][第67题][二进制求和][位运算][字符串]
[问题描述][简单] 给你两个二进制字符串,返回它们的和(用二进制表示).输入为 非空 字符串且只包含数字 1 和 0.示例 1:输入: a = "11", b = "1 ...
- 程序员面试金典 - 面试题 01.01. 判定字符是否唯一(位运算,牛)
1. 题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = " ...
- python写整数逆位运算_位运算
a = 60 # 0011 1100 b = 13 # 0000 1101 运算符 描述 示例 & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 a& ...
最新文章
- 【分析】2014移动互联网数据报告(终极版必收!)
- Python基础(一)简介与安装
- python视频人脸检测_Python学习案例之视频人脸检测识别
- 显示桌面,原来这么简单的
- 滤波器设计(二)模拟到数字
- Springboot2拦截器与文件上传
- 知识蒸馏 | 知识回顾
- 时间计算题100道_上海六年级数学第二学期有理数加减混合计算题100道【含答案】...
- primeng dropdown ngmodel 选择项初始化
- 第八章、所有者权益及损益的核算
- 椭圆型变分问题理论及数值方法
- java 基础面试练习题(易错题)
- 收集的各个方向的开发视频教程,分享给自学的同学
- 联邦学习综述(二)——联邦学习的分类、框架及未来研究方向
- vSphere之VMkernel网络层
- 校园网络的规划与实施(思科)
- mysql 大量数据插入优化
- 【保研】2020年交大、南大、国防科大、北理计算机夏令营经历
- greenplum添加监控
- bmp格式怎么转换?教你三步快速转图片格式