计算机二进制基本运算规则,计算机中的二进制运算
一、计算机中的二进制位运算
??二进制的位运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。与、或和异或运算的规律我们可以用表1总结如下。
表1 与、或、异或的运算规律
与(&)
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
或(|)
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
异或(^)
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
??左移运算符m<
00001010 << 2 = 00101000
10001010 << 3 = 01010000
??右移运算符m>>n表示把m右移n位。在右移n位的时候,最右边的n位将被丢弃。但右移时处理最左边的情形要稍微复杂些。如果数字是一个无符号数值,则用0填补最左边的n位;如果数字是一个有符号数值,则用数字的符号位填补最左边的n位。也就是说,如果数字是正数,则右移之后在最左边补n个0;如果数字是负数,则右移之后在最左边补n个1。下面是对8位有符号数进行右移的例子:
00001010 >> 2 = 00000010
10001010 >> 3 = 11110001
二、unsigned与signed的区别
??首先回顾一下二进制的正负数表达方式。在计算机中使用补码表示正负数,其中正数的补码等于其本身,负数的补码则为原码取反再加1。用4位二进制表示-1 ~ 7如表2所示。
表2 4位二进制
补码
十进制数值
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
-8
1001
-7
1010
-6
1011
-5
1100
-4
1101
-3
1110
-2
1111
-1
??由表2可知,在32位的系统中,int型的-1在计算机中的存储的补码为0xFFFF FFFF。
??如同int a;一样,int 也能被其它的修饰符修饰。除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:
signed----有符号,可修饰char、int(Int是默认有符号的)
unsigned-----无符号,修饰int 、char
long------长型,修饰int 、double
short------短型,修饰int
2.1 无符号整型(unsigned int)
(1)我们都知道整型是4个字节(有些编译器不同,可能会是2个),即32位,无符号整型当然也为32位。
(2)既然是32位,无符号整型的取值是32个0~32个1,即:0~4294967295
(3) 我们举个例子:32位有点长,所以我们拿16位的unsigned short int 来举例。
??short int 是16位的,无符号的范围是0~65535。就拿十进制的32767来说,它的二进制为:0111 1111 1111 1111
??对于无符号的整型32767来说,它的二进制的最高位称为数据位,即那个0就是数据位,数据位是要参与运算的,如果我们把0改成1,即16个1,它的十进制就是65535(就是2的15次方+2的14次方...一直加到2的0次方),这是不同于有符号整型的。
(4) 为了进行理解(3)中的含义,做一个程序说明:
#include
main()
{
unsigned short int a=32767, b=a+1;//定义短整型无符号
printf("a=%u\nb=%u\n",a,b);//以无符号输出
}
??定义的时候a=32767,也就是0111 1111 1111 1111,输出的依然是32767,a+1=32768, 二进制为1000 0000 0000 0000,输入依然为32768。根据(3)中讲解的,无符号整型的二进制最高位为数据位,数据位为0为1都是按照正常来算的。
2.1 有符号整型(signed int)
(1)有符号整型也是32位;
(2)它的取值范围就与无符号整型不同了。它的范围是-2147483648~2147483647这个范围可以理解为无符号整型的一半变成了负数;
(3) 我们举个例子:32位有点长,所以我们拿16位的unsigned short int 来举例。
??short int 是16位的,有符号的范围是-32768~32767。这个时候可能就有人发问了,32768用二进制表示为1000 0000 0000 0000,那么这个负的32768的负号又怎么理解呢?看下面。
??还是以32767为例子,它的二进制为:0111 1111 1111 1111。对于有符号整型32767来说,它的二进制最高位称为符号位(而不是数据位了),符号位顾名思义就是决定正负号的,规则:0是正,1为负。
(4) 为了进行理解(3)中的含义,做一个程序说明:
#include
main()
{
// 定义有符号类型
short int a=32767, b, c, d;
b=a+1;
c=a+2;
d=a+3;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
(5)了解了什么是补码后再来看上述程序:32767的二进制为:0111 1111 1111 1111。我们来计算一下c的值为什么会等于-32767。c=32767+2,c的二进制为:1000 0000 0000 0001(32767的二进制加2),c的这个二进制是在计算机中存储的补码,需要将它转换为原码,也就是将c的二进制数减一再取反。得到的二进制原码为:1111 1111 1111 1111。我们已经说过,符号位为1,表示负值,并不参加运算,所以此二进制的十进制为:-32767。
(6)通过程序也可以发现一个规律,short int的取值范围是-32768~32767,把头尾连接起来形成一个环就可以了。
原文:https://www.cnblogs.com/flyingrun/p/13336828.html
计算机二进制基本运算规则,计算机中的二进制运算相关推荐
- 计算机二进制基本运算规则,二进制信息最基本的逻辑运算有哪三种
二进制信息最基本的三种逻辑运算:1.逻辑加法(又称"或")运算,通常用符号"+"或"∨"来表示:2.逻辑乘法(又称"与" ...
- 计算机二进制存储单位,计算机中的存储单位你清楚吗
计算机的世界是由0和1构成的,它模拟了自然界的开与关,通与止,阴与阳等等一些现象,也就是我们称之为"二进制"中的数据.数据在计算机中以二进制形式存在,通过二进制形式来表示,这就是机 ...
- 如何用计算机二进制进行计算,计算机如何实现二进制数据运算
正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1就是补码 1. 定点小数的编码方法 ...
- 如何形容自己的计算机水平,信息在计算机中的表示
教学任务: (一)知识目标: 1.让学生了解0和1是怎样表示不同信息的. 2.理解什么是二进制,十进制是如何转换成二进制的. 3.学生了解字符编码的简要知识. (二)能力目标 1. 激发学生的学习热情 ...
- 怎样用计算机二进制,二进制计算_如何用系统自带的计算器二进制十进制转换...
系统自带的计算器是不支持小数位转换的.角度是DEG,弧度是RAD,梯度是GRA,转换模式的方法是按MODE,然后按相应的键.二进制,八进制,十六进制和十进制一样是进位制式.四字.双字.单字.字节是数据 ...
- 计算机二进制运算符,二进制布尔运算
二进制布尔运算是对二进制数进行布尔运算的一种运算.二进制数的布尔运算有"与"."或"."非"和"异或"4种,二进制布尔运 ...
- 计算机的工作原理是二进制原理吗,计算机是怎么通过二进制原理来工作的?
计算机是怎么通过二进制原理来工作的? 2018-09-17 https://www.toutiao.com/a6550957329762746637/ 二进制其实就是有没有,有就是1,没有就是0.通过 ...
- 二进制会是计算机最好的选择吗?
信息时代,我们的生活离不开计算机.我们看到的视频.图片,阅读的文字.数字和符号.听到的音乐,其实都是一串由0和1组合的序列.这就是我们计算机经常使用的二进制数. 你知道吗?世界上最早提出二进制的人,就 ...
- 计算机有关的基础知识,计算机基础知识之计算机中有关数及编码的知识
1.4 计算机中有关数及编码的知识 1.计算机是智能化的电器设备 计算机就其本身来说是一个电器设备,为了能够快速存储.处理.传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断.电压高 ...
最新文章
- 在DataGrid中將RowHeader 加上文字...
- Navicat数据库错误2003 Can not connect to Mysql Server on以及Windows无法启动mysql 错误1069
- iptables详解(1):iptables概念
- Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String 序列自动机
- FIFA的完整形式是什么?
- unity UI事件
- Intel Core Enhanced Core架构/微架构/流水线 (12) - 数据预取
- oracle常用的数据字典
- 你画我猜游戏的java实现
- 12月第1周网络安全报告:境内95.8万主机感染病毒
- 抖音协议、火山小视频通信协议加密算法研究分析
- 版本号后面的字母含义
- 如何快速将MOV格式视频转换成MP4格式
- 有各组方差怎么算组间平方和_方差分析:组间离差平方和组内离差平方的定义是什么?...
- ASP.NET编写一个简易网站
- Cesium加载影像图
- spring入参为指定值,校验java入参的值为规定的值,利用Validator指定值校验注解——一看就会
- Unity动态(在代码中)更改Shader的相关属性(如颜色、Smoothness、材质……)
- 最小费用流bellman-ford算法总结
- React 中使用 render props
热门文章
- python中的utils模块_python常用方法utils
- Treap(平衡树)入门
- socketio mysql_socketio server推送
- 手机抓包工具--fiddler everywhere
- SF符号位什么时候为1,什么时候为0!二进制如何判断符号位正负!
- 硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
- 含文档+PPT+源码等]精品基于NET实现的家电维修保养信息系统[包运行成功]计算机毕业设计NET毕设项目源码
- cmdb的开发指导文档
- python全局代理_让requests不走系统 全局 代理
- 数据库备份与恢复简介