十进制-二进制转换测试 v2
来源:互联网 发布:windos系统mac怎么 编辑:程序博客网 时间:2024/06/07 18:19
几个月前,在学习《程序设计基础》课程时,授课老师提到的一个思考题:猜数游戏。其关键模块是如何把十进制数转换成二进制数码。那时我还在用纯初等数学的算法来做这件事,所以能转换的最大值只能到 511 (2的9次方减1)。具体实现代码参见:《十进制-二进制转换测试》。
现在,《程序设计基础》学完已经有十几天了,再回过头来看那个问题,发现其实用位运算可以很方便地解决。实现代码如下:
#include <iostream>using namespace std;int main(){int DecimalToBinary_v2(int n);int n;cout << "输入一个十进制整数:";cin >> n;cout << "对应的二进制码为:" << endl; DecimalToBinary_v2(n);return 0;}int DecimalToBinary_v2(int n){int bit[32];for(int i = 0; i < 4 * 8; i++)bit[i] = (n >> i) & 1;for(int i = 31; i >= 0; i--){cout << bit[i];if(i % 4 == 0) cout << ' ';}cout << endl;}
测试结果:
1,正整型数的最大值为2147483647,输入控制台,显示数码为:
即使输入更大的值,这个结果也不会变:
2,负整型数的最大值为 -2147483648,显示二进制码为:
绝对值比它小的,可以发现是以“非原码”的形式存储的:
而绝对值比它大的,显示结果都同最大值一样:
======================================分割线======================================
至于基于这个算法的猜数游戏,就不必实现了。要想实现,肯定是可以实现的:bit[32] 数组中哪一位为1,对应的数就出现在哪一张卡片上。但是:一共将有31张卡片供玩家挑选!并且平均每张卡片上有 2147483648 ÷ 31 > 6千万个数!谁有耐心从6千万个数中一个个地看有没有“他/她心中所想的那个数”呢?!所以猜数游戏的上界太大,其实会导致这个游戏不可行。所以,之前那个七张卡片版本的猜数游戏已经很好啦!详见:《猜数游戏(from 1 to n)》
阅读全文
0 0
- 十进制-二进制转换测试 v2
- 十进制-二进制转换测试
- 十进制转换二进制(反码)
- 十进制转换为二进制
- 二进制与十进制转换
- JvavScript二进制十进制转换
- 十进制转换成二进制
- 十进制转换二进制等等
- 二进制_十进制转换
- b2d 二进制转换十进制
- 十进制转换二进制
- 十进制转换二进制
- 十进制转换二进制数
- 十进制转换成二进制
- 十进制二进制互相转换
- 二进制与十进制转换
- 十进制转换二进制
- 十进制转换为二进制
- 欢迎使用CSDN-markdown编辑器
- 表单焦点: focus/blur
- QuickSort 和 MergeSort
- 处理器返回值 数值 字符串 自定义 map list 类型
- Flex DateField 日期范围
- 十进制-二进制转换测试 v2
- js判断用户的浏览设备是移动设备还是PC
- 如何使用vue-cli创建项目
- C++运算符重载范例
- 字符串相关算法例题
- 洛谷 P3398 仓鼠找sugar
- AWS云服务分析
- 洛谷 P3128 [USACO15DEC]最大流Max Flow
- 使用netty开发私有栈协议