精华内容
下载资源
问答
  • C++ 输出二进制数

    千次阅读 2019-07-29 15:41:31
    这几天学组成原理,碰到需要输出二进制数的情况,验证a÷(2^n)≠a>>n,我想用高级语言内在的模块实现,程序如下。 bitset后面的<>中的数字,指定输出的位数 #include<iostream> #include<...

    这几天学组成原理,碰到需要输出二进制数的情况,验证a÷(2^n)≠a>>n,我想用高级语言内在的模块实现,程序如下。

    bitset后面的<>中的数字,指定输出的位数

    #include<iostream>
    #include<bitset>
    using namespace std;
    
    int main()
    {
    	int a;
    	cin>>a;
    	cout<<bitset<8>(a)<<endl;
    	cout<<bitset<8>(a/4)<<endl;
    	cout<<bitset<8>((a>>2))<<endl;
    	return 0;
    }
    

    如果输入整型-5,
    -5÷(2^2)=-1
    -5>>2=-2
    可以看到结果如下,C语言中数据用补码表示,此处没有显示符号位。-5补码11111011,补码11111111对应-1,补码11111110对应-2。
    则得出结论,即便除法采用算术移位,计算机中除以2的n次方,也不能简单地等同于右移2的n次方。
    运行截图

    展开全文
  • C++输出二进制数

    千次阅读 2020-06-08 08:17:25
    #include<iostream> #include<bitset> using namespace std; int main(void) { int a = 2; cout << (bitset<8>)a <<...其中8表示要输出二进制数的位数 输出结果
    #include<iostream>
    #include<bitset>
    using namespace std;
    
    int main(void)
    {
        int a = 2;
        cout << (bitset<8>)a << endl;
        return 0;
    }
    

    bitset<8>
    其中8表示要输出的二进制数的位数

    输出结果
    在这里插入图片描述

    展开全文
  • 二进制是现代计算机计算和运行的基础那么这周我们就来了解一下什么是二进制01.幸福终将破土而出01. 什么是二进制17世纪至18世纪的德国数学家莱布尼茨是世界上第一个提出二进制记数法的人二进制记数只用0和1两个符号...

    二进制是现代计算机计算和运行的基础

    那么这周我们就来了解一下

    什么是二进制

    01. 幸福终将破土而出

    01. 什么是二进制

    17世纪至18世纪的德国数学家莱布尼茨

    是世界上第一个提出二进制记数法的人

    二进制记数只用0和1两个符号无需其他符号

    二进制数据也是采用位置计数法

    其位权是以2为底的幂

    例如二进制数据110.11,逢2进1

    其权的大小顺序为22、21、2º、2ˉ¹、2ˉ²

    对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为:

    96541d1a983a9205ae67e28d9edf3c83.png 二进制数据一般可写为:0dd2ceddd701d276515170bc0a5df28a.png

    【例】:将二进制数据111.01写成加权系数的形式

    6ce735624ea690f14d2af4f61a88a69c.png

    04. 幸福终将破土而出

    02. 二进制的发展史

    莱布尼兹自1679 就开始了从事二进制相关研究,他的研究成果最早发表于1703年,《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》 。

    提到伏羲,很多学术界的观点觉得二进制的灵感来自于中国的伏羲八卦的影响,也有人觉得时间上对不上,很多我们教科书上的观点,在某种程度上都还没有定论。

    cc4800c408c3984d0a4f1fd65b6cfc5b.png

    1854年

    英国数学家乔治·布尔上升到代数化的逻辑系统

    大家现在看到的布尔代数

    奠定了电路使用二进制的数学基础

    1937年

    克劳德·香农电气工程硕士学位论文

    用继电器和开关实现了布尔代数和二进制算术运算

    论文题为《继电器与开关电路的符号分析》

    其中香农的理论奠定了数字电路的理论基础

    1937年11月

    任职于贝尔实验室的乔治·斯蒂比兹发明了用继电器表示二进制的装置

    它是第一台二进制电子计算机

    04. 幸福终将破土而出

    03.  计算机为什么会用二进制

    ●  技术上容易实现

    用双稳态电路表示二进制数字0和1是很容易的事情

    ●  可靠性高

    二进制中只使用0和1两个数字,传输和处理时不易出错

    ●  运算规则简单

    与十进制数相比,二进制数的运算规则要简单得多,这不仅可以使运算器的结构得到简化,而且有利于提高运算速度

    ●  与逻辑量相吻合

    二进制数0和1正好与逻辑量“真”和“假”相对应,用二进制数表示二值逻辑显得十分自然

     ●  二进制数与十进制数之间的转换相当容易

    人们使用计算机时可以仍然使用自己所习惯的十进制数,而计算机将其自动转换成二进制数存储和处理,输出处理结果时又将二进制数自动转换成十进制数,这给工作带来极大的方便

    04. 幸福终将破土而出

    04. 二进制与ASCII码

    如果计算机只存储二进制数据,那么它如何表示字符呢?计算机使用的是字符集,将字符映射为整数。早期,字符集只用 8 位表示。即使是现在,在字符模式下运行时,IBM 兼容微机使用的还是 ASCII(读为“askey”)字符集。

    ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符

    标准ASCII码也叫基础ASCII码

    使用7位二进制数来表示所有的大写和小写字母

    数字0到9、标点符号,以及在美式英语中使用的特殊控制字符

    ASCII分配数值

    5f8b281cb22e6faa4e0b2bd83b63c33b.png

    cdd043b999316712b39be0735393f210.png

    展开全文
  • 计算机最基本的工作是处理数据,而数据的最底层表现形式是二进制,并非是我们人类熟悉的十进制。可以这么认为,计算机其实是很“笨的”,它只理解二进制数据。今天,主要介绍计算机是...1,二进制数我们先来看看二进...

    计算机最基本的工作是处理数据,而数据的最底层表现形式是二进制,并非是我们人类熟悉的十进制。可以这么认为,计算机其实是很“笨的”,它只理解二进制数据。

    今天,主要介绍计算机是怎样做加减运算的。你可能会想,加减运算?这么简单的事情,还用介绍?也许还真不是你想的那样。

    计算机的运算是由CPU 完成的,而CPU 只会做加法运算,不会做减法运算,那计算机怎样完成减法工作呢?

    1,二进制数

    我们先来看看二进制数。

    二进制数是由0,1 组成的,比如:

    • 十进制的5,用二进制表示是 101。

    • 十进制的7,用二进制表示是 111。

    数字由正数和负数组成。为了表示正负数,计算机中就有了有符号数无符号数之分:

    • 无符号数:英文为 unsigned,只能表示正数。

    • 有符号数:英文为 signed,即能表示正数,又能表示负数。

    C/C++ 语言中的数字有有符号数无符号数之分。 

    Java 语言所有的数字都是有符号数

    假如,我们用 4 位二进制,来表示无符号数,也就是只表示正数,能表示的范围是 0 到 15,转换关系如下表:

    十进制数二进制数十进制数二进制数
    0000081000
    1000191001
    20010101010
    30011111011
    40100121100
    50101131101
    60110141110
    70111151111

    有符号数,即要表示正数,也要表示负数。

    要用二进制表示有符号数,需要用二进制的最高位来表示符号,0 表示1 表示。所谓的最高位,也就是最左边那一位。

    用 4 位二进制,来表示有符号数,能表示的范围是 -8 到 7,转换关系如下表:

    十进制数二进制数十进制数二进制数
    00000-81000
    10001-11001
    20010-21010
    30011-31011
    40100-41100
    50101-51101
    60110-61110
    70111-71111

    上表中的最高位的符号位,已标红。

    要注意,对于有符号的4 位二进制 ----1000 不是 -0,而是 -8

    可以总结出,对于 N 位的二进制数:

    • 无论是表示有符号数还是无符号数,都能表示 2^N 个数字。

    • 若用于表示无符号数,则能表示的范围是 [0, 2^N - 1]

    • 若用于表示有符号数,则能表示的范围是 [-2^(N-1), 2^(N-1) - 1]

      • 需要注意,在有符号数中,对于符号位是 1,后面 N-1 位全是 0,这种情况表示的是 -2^(N-1)(也就是所能表示的最小值),而不是 -0

      • 实际上是将 -0 这种情况解释成了最小值,否则就会出现 +0 和 -0 两个0

    2,二进制原码

    上面介绍到的二进制就是原码形式。

    原码就是除符号位外的其他位,保存该二进制数的绝对值。

    用原码进行加法计算

    计算机中的数字运算都会先转成二进制数再进行计算。

    我们用原码来计算加法,用4 位二进制数来计算 3 + 2,过程如下:

    ddc56a2079611620a41c8305d33abe52.png

    可以看到,用原码计算加法是没有问题的。

    用原码进行减法计算

    我们再用原码来计算减法,因为CPU 只会计算加法,所以计算减法时,会将减法转换成加法。

    比如,用4 位二进制数来计算计算 3 - 2,会将其转换成 3 + (-2), 过程如下:

    26c1fe6cedc21fad5f2cb0b07f7c24e2.png

    可以看到 3-2 计算出来的结果是 -5,显然是错误的。

    所以,用二进制原码来计算减法是行不通的。实际上,计算机计算减法用的是补码

    在介绍补码之前,我们先来看下什么是溢出

    3,数字溢出

    计算机中数字的表示是需要内存空间的,不同类型的数字所能占用的空间是不一样的。

    比如,在Java 语言中 short 类型占用 2 个字节,int 类型占用 4 个字节。

    一个字节等于 8 位。

    既然空间大小是有限制的,所以计算机中的数字也是有范围的,即上限下限,如果数字超出限制,就会产生溢出。超出上限叫上溢出,超出下限叫下溢出。而溢出的部分会直接被舍去

    就像我们在上文中介绍的,对于 N 位二进制有符号整数,所能表示的范围是 [-2^(N-1), 2^(N-1) - 1]

    由于溢出的部分会被舍去,那么最大值加1,将发生上溢出,变为最小值;最小值减1,将发生下溢出,变为最大值。

    0b2e30e6e4b3fea8cfe10546555ac950.png

    我们用Java 中的 int 类型来验证,Java 中 int 类型的最大、最小值分别是:

    • 最大值:Integer.MAX_VALUE,是 2147483647

    • 最小值:Integer.MIN_VALUE,是 -2147483648

    用下面代码验证:

    System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); // trueSystem.out.println(Integer.MIN_VALUE - 1 == Integer.MAX_VALUE); // true

    这两行代码的输出均为 true,说明最大值加1 变为最小值,最小值减1 变为最大值。

    所以,在计算机中,只要一个整数的类型确定了,那么它所能占用的内存空间大小也就确定了,从而它所能表示的数字范围也就确定了。那么不管给这个整数加多大的数字,或者减多大的数字,最终的结果都只能在这个范围内旋转。

    就像表盘一样,当表针走过最大值的时候,就变成了最小值。

    a2c63d2fffce98e1c87223d55554623b.png

    同样,这也等同于数学中的取余运算。只要分母确定了,不管分子是多大,或者多小的数字,最终的结果也都是在一个确定的范围之内。

    比如我们对十进制 5 进行取余计算,那么最终的结果都是在 [0, 4] 范围之内,如下:

    • 0 % 5 = 0

    • 2 % 5 = 2

    • 397 % 5 = 2

    • 99999 % 5 = 4

    可以总结出,对数字 N 进行取余,N >= 2 且为整数,那么结果都在 [0, N-1] 范围之内。

    4,二进制反码与补码

    知道了溢出,就可以介绍CPU 如何计算减法了。CPU 的减法运算使用了二进制补码,补码实际上就是采用了溢出的原理。

    我们直接给出反码与补码的定义:

    • 码定义:正数的反码等于其原码,负数的反码是其原码除符号位外,按位取反

    • 补码定义:正数的补码等于其原码,负数的补码是其反码加1

    比如下面的几个数字:

    十进制数23-2-5
    二进制原码0010001110101101
    二进制反码0010001111011010
    二进制补码0010001111101011

    我们用 4 位二进制补码来计算 3+(-2),如下:

    4ea21cae86b610b214891b3a033ba603.png

    最高位的 1 发生上溢出,直接被舍去,所以结果是正确的。

    所以,要记住,真实的计算机中的二进制是用补码表示的,而不是原码

    5,总结

    本篇文章主要介绍了:

    • CPU 只能做加法,不能做减法,减法要转成加法做计算。

    • 二进制数字有三种表示方式:

      • 码:除符号位外的其他位,保存该二进制数的绝对值。

      • 码:正数的反码等于其原码,负数的反码是其原码除符号位外,按位取反。

      • 补码:正数的补码等于其原码,负数的补码是其反码加1。

    • 计算机中的数字采用二进制补码表示,而不是原码表示。

      • 补码采用了溢出的原理。

    • 算机中的数字是有范围限制的,超出限制会发生溢出。

      • 超出上限叫做上溢出。最大值加1会发生上溢出,变为最小值。

      • 超出下限叫做下溢出。最小值减1会发生下溢出,变为最大值。

    (本节完。)


    推荐阅读:

    决策树算法-理论篇

    决策树算法-实战篇

    朴素贝叶斯分类-理论篇

    设计模式之高质量代码

    如何高效使用VIM


    欢迎关注作者公众号,获取更多技术干货。

    dd94c2485575564acca0bc0e2082d4bd.png

    bf3437a51cab4b90410f0a9938c98cd8.gif

    展开全文
  • 5.2 指令集(指令编码):指令集包括一套CPU可以完成的操作集合,每一条指令语句由操作码和操作数(上述的数据编码)组成(特殊指令语句可以没有操作数),按指令格式编码为1-6个字节的二进制数序列; 5.3 机器语言与机器...
  • 在c语言中,我们可以通过%d、%o 和%x 输出二进制、八进制和十六进制数。而在c++中则通过 iostream 头文件中提供的不同的控制符来达到不同的输出: dec:表示cout以十进制输出; hex:表示cout以十六进制输出; oct:...
  • 一、输出十进制、十六进制、八进制数: dec: 指示cout以十进制输出。 December hex: 指示cout以十六进制输出。 Hexadecimal oct: 指示cout以八进制输出。 October #include<iostream> using namespace ...
  • C++实现十进制数转二进制数程序 转换方法 十进制的数要转换到二进制数,需要把这个数(十进制情况下)除以2,得到余数0或1.然后循环操作,一直到这个数为1为止。 然后把所以得到的余数倒序读数,然后输出。 如29: ...
  • 【引言】今天讲讲位运算与状态压缩。位运算涉及系统底层的...【位运算介绍】 我们知道程序中的所有数字(不止数字,包括图片、视频等任何元素)在计算机内存中都是以二进制的形式储存的,而位运算就是直接对二进制进...
  • PPC和MIPS指令集下二进制代码中函数参数个的识别方法尹小康,刘鎏,刘龙,刘胜利数学工程与先进计算国家重点实验室,河南 郑州 450001摘要:函数参数个的识别有助于函数原型的恢复,是进行数据流分析以及其他安全...
  • 所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值。能引起不同的是数字和一些排版用符号的格式。 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量,并...
  • C++ 中,我们可以利用下面的方法,将一个十进制数直接转换为二进制数输出。1、bitset 类型可以代表任意长度的二进制集合。2、bitset() 构造函数可以将一个十进制数转换为其二进制形式。3、stream 被重载,可以...
  • 第二行输出整数n的二进制镜像(十进制即可) 提示你需要提交除了main函数之外的代码 样例输入复制样例输入数据 <p>65538 样例输出2 1073774592 允许最长运行时间1000ms 允许使用最大内存...
  • C/C++将十进制数转为二进制输出

    千次阅读 2018-03-17 21:11:37
    头文件用了C++的,也可以加上#include <...//将十进制转为二进制,并输出其中1的个数。 using namespace std; int main() { int t,n,a[100]; int i,k,j; cin>>t; while(t--)//控制多组输...
  • C++中十进制数转换为二进制数

    千次阅读 2011-08-17 09:35:13
    C++ 中,我们可以利用下面的方法,将一个十进制数直接转换为二进制数输出。1、bitset 类型可以代表任意长度的二进制集合。 2、bitset() 构造函数可以将一个十进制数转换为其二进制形式。 3、stream 被重载,...
  • 打开Dev-cpp,点击左上角的白色小方框和“源代码”或者键入【Ctrl+N】,开始编写代码输入以下代码#include 键入【Ctrl+S】保存,保存类型选择“C source files”然后按下【F11】编译并运行,秒之后出现黑框(由于...
  • #include #include //using std::cout;using namespace std;int main(){ cout }这种方法不能对二进制进行输出
  • #include //#include using namespace std; int main(void) { int i,j,k,l; cout(oct),j(hex),k(hex),l(dec):"; cin>>oct>>i; //输入为八进制数 cin>>hex>>j; /
  • 本文给大家介绍的是一则使用C++实现读入二进制数并转换为十进制输出的代码,实现起来其实非常简单,C++本身就提供了二进制类库的,大家看代码吧,简单又实用。
  • 问题背景熟悉C语言的大概都知道,在C语言里可以用printf中的 %o %x %d 来分别输出 8 进制、16进制、10进制的,但唯独不支持二进制。因此用C++的时候潜意识里也认为转二进制需要自己造轮子,于是为了一道题自己写了...
  • c/c++进制数输出二进制

    千次阅读 2008-03-10 18:29:00
    打印二进制的代码也不是那么容易的,不信写个看看,和下面这个(一本老外的C语言教材上的代码)比较一下,看看写的是否全面//#define CHAR_BIT 8 void bit_print(int a){ int i; int n = sizeof(int) * ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 983
精华内容 393
关键字:

c++输出二进制数

c++ 订阅