-
十六进制之间的加减
2019-08-25 10:18:4864位有符号整数a 0x7FFFFFFFFFFFFFFF 和 b0x8000000000000000相加,之后的10进制数? 0x7FFFFFFFFFFFFFFF 0x8000000000000000 0xFFFFFFFFFFFFFFFF(16个F) 16个F就是64个1,由于二进制有符号数都是用最高位...64位有符号整数a 0x7FFFFFFFFFFFFFFF 和 b 0x8000000000000000相加,之后的10进制数?
0x7FFFFFFFFFFFFFFF
0x8000000000000000
0xFFFFFFFFFFFFFFFF(16个F)
16个F就是64个1,由于二进制有符号数都是用最高位作为符号位,计算机作为存储负数用的是补码方式,其计算方式:
正数,原码和补码相同。
负数,需要除了符号位之外所有的位要按位取反,之后末尾+1.
所以对于
0xFFFFFFFFFFFFFFFF就有64个1(一个F为4个1),所以要减去-1,之后按位取反得到二进制数11,由于0
表示正,1表示负数,所以是-1. -
python实现十六进制补码的加减乘计算
2020-03-22 23:33:39(1)实现十六进制补码加减乘计算; (2)使用方法。把本脚本命名为calc.py。在terminal中输入python calc.py string。即可根据输入个string做计算。如,输入python calc.py 50x10*50x0f,既可以得到100x310。这里...脚本介绍:
(1)实现十六进制补码加减乘计算;
(2)使用方法。把本脚本命名为calc.py。在terminal中输入python calc.py string。即可根据输入的string做计算。如,输入python calc.py 50x10*50x0f,既可以得到100x310。这里的输入数据和输入都是用补码形式计算的。0x表示输入数是16进制,0x前的数表示该数的位宽,0x后面的数是参与运算的数值。这个例子就实际上就是计算-16*15,计算结果为-240。
(3)这里使用了sys,argv,str,int,eval,字符串的分割和拼接等。
import sys print("This is a two's complement calculator\n") op_str = sys.argv[1] #get the operator and operand if "+" in op_str: op_num = op_str.split("+") op_a = op_num[0] op_b = op_num[1] op_s = "+" elif "-" in op_str: op_num = op_str.split("-") op_a = op_num[0] op_b = op_num[1] op_s = "-" elif "*" in op_str: op_num = op_str.split("*") op_a = op_num[0] op_b = op_num[1] op_s = "*" #obtain the operand and translate it to int op_a_l = op_a.split("0x") op_a_width = int(op_a_l[0]) op_a_num = int(op_a_l[1],16) op_b_l = op_b.split("0x") op_b_width = int(op_b_l[0]) op_b_num = int(op_b_l[1],16) #two's complement -> signed decimal if op_a_num >= 2**(op_a_width-1) : op_a_real = op_a_num - 2**op_a_width else: op_a_real = op_a_num if op_b_num >= 2**(op_b_width-1) : op_b_real = op_b_num - 2**op_b_width else: op_b_real = op_b_num #calculate the result width if op_s == "-" or op_s == "+": if op_a_width > op_b_width: op_result_width = op_a_width+1 else: op_result_width = op_b_width+1 else: op_result_width = op_a_width + op_b_width *use eval function op_result_str = str(op_a_real) + op_s + str(op_b_real) op_result_num = eval(op_result_str) #signed decimal -> two's complement if op_result_num <0: op_result_real = op_result_num + 2**op_result_width else: op_result_real = op_result_num #translate to hex op_result_hex = hex(op_result_real) #connect strings op_result= str(op_result_width)+op_result_hex #print the reuslt print("The result is %s"%(op_result))
-
DEVC++单文件实现十六进制数类运算
2016-10-04 23:59:05以单文件的形式,实现十六进制数类的构建,并通过运算符重载,定义十六进制数的加减乘除取整等运算。 -
用汇编实现十六进制数向十进制数的转换
2020-08-03 17:06:00用汇编实现十六进制数向... 特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。 实现十六进制数向十进制数的转换,先输入一位16进制用汇编实现十六进制数向十进制数的转换
一、实现功能
实现一位十六进制数向十进制数的转换。
二、设计分析
汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。
特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。
-
实现十六进制数向十进制数的转换,先输入一位16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。
-
接下来需要将DL中的二进制数转换为十进制数输出。这里我选择将DX除以10,商在AL中,用来表示十位数,余数在AH中,用来表示个位数,如果商是0,则不用输出;如果商是1,则ADD AH,30H,输出AH。余数ADD AL,30H,输出AL。即可得到16进制对应的十进制数。
-
(注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加减法)最后输出对应的16进制的ascii码的值。
-
十六进制数向十进制数的转换流程图:
三、源代码
DATA SEGMENT TIP DB 'INPUT THE NUMBER: ','$' TIP1 DB ' <=> ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,TIP MOV AH,09H INT 21H INPUT: MOV AH,1 INT 21H CMP AL,30H JB EXIT CMP AL,39H JA COMPER1 JMP CHANGE1 ;在0~9之间 COMPER1: CMP AL,41H JB EXIT CMP AL,46H JA COMPER2 JMP CHANGE2 ;在A-F之间 COMPER2: CMP AL,61H JB EXIT CMP AL,66H JA EXIT JMP CHANGE3 ;在a~f之间 CHANGE1: SUB AL,30H JMP ENT CHANGE2: SUB AL,37H JMP ENT CHANGE3: SUB AL,57H JMP ENT ENT: MOV BL,AL LEA DX,TIP1 MOV AH,09H INT 21H MOV AL,BL MOV AH,0 MOV BL,10 DIV BL MOV DH,AH CMP AL,0 JE ONE MOV DL,AL ;十位数是1 ADD DL,30H MOV AH,02H INT 21H ONE: ;十位数是0 MOV DL,DH ADD DL,30H MOV AH,02H INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START
-
-
用汇编实现二进制数和十六进制数的相互转换
2020-08-03 16:50:13用汇编实现二进制数向十六进制数的转换 一、实现功能 ...特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。 &nb用汇编实现二进制数向十六进制数的转换
一、实现功能
1)实现二进制数向十六进制数的转换
2)实现十六进制数向二进制数的转换‘二、设计分析
汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。
特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。
四位二进制数对应一位十六进制数,这里写的也是四位二进制和一位十六进制之间的的转换。
- 先输入四位的二进制数,每输入一位二进制数就判断输入的时0还是1,即将该数和30H做比较。
- 将DL赋值为0。如果输入的数是0,则将DL和0进行或运算(也可以不进行逻辑运算直接移位),将DL的最后一位置为0;如果输入的数是1,则将DL和1进行或运算,将DL的最后一位置为1。然后将DL向左移一位。进行4次循环,级输入4为二进制数。四位输入完毕后,DL就得到输入数的二进制。
- 判断DL是否在0-9之间,如果在则ADD DL,30H;如果大于0-9,则ADD DL,37H。(注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加法)最后输出对应的16进制的ascii码的值。如果小于0-9则JMP到程序开始重新输入功能序号。
- 二进制转十六进制的流程图:
- 先输入一个16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。即可得到输入的十六进制数的值,而不是字符的ascii码的值。
- 最后需要将DL中的值以二进制输出,因为机器里存放的就是以二进制存放。这里我用循环左移的方式,从二进制的高位到低位一次循环打印。将循环左移一位后的数与1进行与运算,得到最低位的大小(也就是当前准备输出的位置的大小),然后加上30H,得到0/1的ascii码值,依次将DL的值进行输出。
- 需要注意,第2步进行与运算的时候不能再原来的寄存器上进行,否则只能得到一位二进制数,后面几位都没法求了。
- 一个十六进制数向二进制数的转换流程图:
三、设计分析
四位二进制数向十六进制数的转换
DATA SEGMENT TIP DB 'INPUT THE NUMBER: ','$' TIP1 DB ' <=> ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,TIP MOV AH,09H INT 21H MOV CH,4 MOV DL,0 INPUT: MOV AH,1 INT 21H CMP AL,30H JA L1 ;输入的是1 ROL DL,1 OR DL,0 JMP AGAIN L1: ROL DL,1 OR DL,1 AGAIN: DEC CH JZ PRINT JMP INPUT PRINT: CMP DL,0 JB EXIT CMP DL,9 JA COMPER1 ADD DL,30H JMP HEN COMPER1: ADD DL,37H HEN: MOV AL,DL LEA DX,TIP1 MOV AH,09H INT 21H MOV DL,AL MOV AH,02H INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START
实现一个十六进制数向二进制数的转换
DATA SEGMENT TIP DB 'INPUT THE NUMBER: ','$' TIP1 DB ' <=> ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA DX,TIP MOV AH,09H INT 21H INPUT: MOV AH,1 INT 21H CMP AL,30H JB EXIT CMP AL,39H JA COMPER1 JMP CHANGE1 ;在0~9之间 COMPER1: CMP AL,41H JB EXIT CMP AL,46H JA COMPER2 JMP CHANGE2 ;在A-F之间 COMPER2: CMP AL,61H JB EXIT CMP AL,66H JA EXIT JMP CHANGE3 ;在a~f之间 CHANGE1: SUB AL,30H JMP ENT CHANGE2: SUB AL,37H JMP ENT CHANGE3: SUB AL,57H JMP ENT ENT: LEA DX,TIP1 MOV AH,09H INT 21H MOV CH,8 MOV BL,AL PRINT: ROL BL,1 MOV DL,BL AND DL,1 ADD DL,30H MOV AH,02H INT 21H DEC CH JZ EXIT JMP PRINT EXIT: MOV AH,4CH INT 21H CODE ENDS END START
-
PHP有木有2个十六进制数加减的函数?
2013-10-27 09:27:440xFFF+Ox33 = ??? 诸如此类。 输入结果仍然是十六进制的。 -
二进制、八进制、十六进制的概念以及加减运算
2017-11-30 15:15:58我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、二十九、...因为逢十进一(满十进一),也因为只有 0~9 共十个数字,所以叫做十进制(Decim -
HDU(2057)十六进制数相加
2014-03-04 21:04:40本来想把十六进制的数先转化为十进制的数相加,然后再转化为十六进制的数输出,网上一搜,原来C语言如此强大,可以直接用十六进制输入,十六进制的数输出。非常气氛学校开学没学C语言,来的就开始学C++;导致C语言中... -
c++十六进制加法_基于c++的大整数运算(支持二进制以及十进制的加、减、乘、除)...
2020-12-20 19:13:42大整数的存储、运算和显示,可以同时支持二进制和十进制,但至少要支持十进制。大整数输出显示时,必须能清楚地表达出整数的位数。测试时,各种情况都需要测试,并附上测试截图;要求测试例子要比较详尽,各种极限... -
十六进制转十进制
2021-01-19 18:07:55把十进制转化为十六进制只需要把十进制数的n位乘16的n减一次方即可。把A转化为10则用了ASCII码的偏差值,A的ASCII码是65,所以只需要将ASCII码大于65的值减65加10就可得到十进制数。 import java -
利用Windows自带的计算器计算十六进制(八进制、二进制)数据
2019-05-16 22:53:15有时需要对十六进制数做加减乘除,某些手机app能实现此功能,但使用起来未免有些麻烦,其实Windows自带的计算器就可以实现十六进制数的运算。 1.找到并打开计算器 2.点击如图所示的位置 3.点击程序员选项 ... -
HDOJ 2057 A + B Again(十六进制加减,__int64)
2017-08-06 10:34:26说明:%I64X:用大写字母输出无符号的十六进制数,也就是说无法输出负数。一个简单的写法,负数取绝对值,加个负号即可。 下面转载了一段关于__int64的用法说明:__int64的使用方法#include using namespace std; ... -
十进制、二进制和十六进制间1~15相对应的数值;二进制的计算
2020-09-29 09:38:32十进制、二进制和十六进制间1~15各自对应的数值。 二进制数加、减、乘、除四则运算。 加运算:0+0=0,0+1=1,1+0=1,1+1=10,(逢2进1); 减运算:1-1=0,1-0=1,0-0=0,0-1=1,(向高位,借1当2); 乘运算:0×0... -
十六进制转换为浮点型函数实现_进制转换app
2021-01-05 13:26:28进制转换app就是一个简洁的进制转换器,一个由Flutter跨平台工具构建,包含了2、8、10、16进制整数、小数的相互转换,以及简单的加减计算的app。所有功能都集成在同一界面实现,易于操作和使用,一目了然的操作界面... -
二进制转八,十,十六进制方法
2021-01-21 18:31:10转十进制: 就直接把二进制数中 1 的位数减一对应到2的幂上,再求和 如下:128+0+32+0+0+4+0+1=165 其中128是二进制位数8-1=7的2的7次幂 转八进制: 可以从右向左看,每三个数画一条线 如: 10 100 101 分开后发现... -
十六进制计数器.docx
2019-05-23 18:24:18P2 口接动态数码管 D2 的字形码笔段,P1.6 和 P1.7 接动态数码管的数位选择端(低电平有效);P1.5 接一个单刀双掷开关 SW1,SW1 再分别接到高电平和低电平;P1.0和 P1.1 分别各接一个按钮 ADD 和 DEL;P1.4 接一个 ... -
Java运算符 + 十、二、八、十六进制之间的转换 + 源码、反码、补码
2020-05-23 19:52:48按照操作数的数目进行划分 单目 a++ 双目 a+b 三目 (a>b)?x:y 按照运算符功能进行划分 算数运算 +、 -、 *、 /:加、减、乘、除 %:取余、取模 ++:自增 (放在变量前面先加后用;放在变量后面... -
十六进制除法运算法则_初中数学归类总结(四)有理数的乘除乘方及混合运算...
2021-01-12 23:54:08学习了有理数的加减运算以后,再来进行有理数的乘除,就比较容易理解和运算了。首先我们来看有理数的乘法法则:两数相乘,同号得正,异号得负,并把绝对值相乘;任何数与零相乘,积仍为0。有理数乘法法则和有理数加... -
【数字电子技术 Digital Electronic Technology 1】——数制和码制 之 不同数制的转换以及二进制算术运算
2019-08-31 14:49:12二进制数的计算3.1.加减乘除3.2.反码和补码3.2.1反码,补码的求法3.2.2.关于符号的问题3.2.3.补码的意义 2. 不同数制之间的转换 2.1. 十进制和二进制之间的转换 方法一:除2取余法 方法二:这个方法非常快捷... -
汇编语言基础-第二章
2020-10-04 12:38:57目录数据表示二进制:十六进制:转换数补码:BCD码:常量变量存储方式属性寻址方式 数据表示 二进制: 便于计算机存储及物理实现 特点:逢二进一,由0和1两个数码组成...十六进制数的加减:逢16进位1,借1当16 转换 每 -
汇编中有符号数加减计算的补码解释
2019-05-31 23:00:50以上定义的两个数据都是机器码形式(二进制/十六进制),它们可能是无符号数(的补码形式)236和2,也可能是有符号数的补码形式-20和20,(机器内部的计算都是以补码形式进行),所以无法直接看出它们的真值(十进制... -
80c51单片机4位数码管计算器设计
2010-06-30 12:28:25工作原理:单片机具有较强的计算功能,利用控制器上的键盘显示即可设计简单的计算器。把16个键分别赋予0~9十个数字键、...3.要求能进行双字节十六进制数的加减乘除运算; 4.运算结果大于四位时,采用自动分屏显示。 -
汇编语言二进制转十进制_汇编语言笔记(一)——基础知识
2020-12-13 15:30:21汇编语言基础知识汇编语言组成汇编指令:就是机器指令的助记符伪指令其他符号计算机中数的表示2^10=1K2^20=1M2^30=1G2^40=1T进制运算二进制运算:1+1=0(向高位进1)十六进制运算:掌握加减乘除运算补码运算补码表示:... -
进制转换
2020-01-19 22:31:03计算方法?????????...10(int):用ans乘以x再从高位到低位加上字符串的每一位数字即可(若数位上是字母则减a加10) int XToDec(string s,int x) //将给定的x进制字符串s转换成10进制 { int ans =... -
C++ MFC编写的计算器含各种进制转化、括号等基本功能
2014-09-13 16:12:231能够实现基本的加减乘除运算,区分乘除、加减的优先级别,并实现括号的优先级别,运算符的混合运算都能基本实现; 2.界面上设置了多个函数,当界面上有数字时,按下键位就能够得到这个数的对应值; 3.添加了一个... -
在WinDBG中进行进制转换和简单的计算
2011-01-01 13:58:00在WinDBG中可以进行一些简单的计算工作, 比如16进制与10进制之间的相互转换, 加减乘除等. 举例1, 进制转换: 注意, 上面的例子中的第二个命令告诉我们, 十进制的数字在windbg中进行表示的时候前面要加上前缀"0n... -
进制,位运算,条件语句 if, 多分支语句switch...case
2020-07-11 10:44:01四位二进制来表示一个十六进制数 位运算 &位与运算 只有1&1为1,其余全为0 任何数与2的n次方减1为原数值 |位或运算 1|1=1,0|1=1,1|0=1,0|0=0 ^异或运算 00=0,10=0,01=1,10=1 位非运算 ~str.indef... -
python mac地址加减1算法_用LUA做一个MAC地址加一的算法
2021-01-14 02:20:04展开全部可以先转换为十进制进行加减操作后再转换回十六进制即可封装的两个函62616964757a686964616fe78988e69d8331333337376337数:1、string.split用于分割字符串,传入要分割的字符串和分隔符,返回分割后的table... -
vc计算器源代码,支持各种进制正余弦的计算器,vc多功能计算器,vc计算器,mfc计算器,
2008-12-18 18:45:041、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算 2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行 3、以角度、弧度两种方式实现上述部分函数 4... -
UTF-7编码当中的加减号(+ -)
2020-11-12 20:54:36文章目录文章背景UTF-7编码当中的加减号(+ -) 文章背景 来自于中科大2020年CTF比赛: 233 同学的字符串工具 本题要求了解UTF-7编码规范 UTF-7编码当中的加减号(+ -) 本题WP当中最令笔者奇怪的是答案当中的+ -,如图 ...
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
MySQL 高可用工具 heartbeat 实战部署详解
-
猫眼谐振腔在全外腔长氦氖激光器中的应用
-
斜光轴数字强度相关计量的像模糊容限
-
HRBUST1754 Minimum Scalar Product【序列处理】
-
虚幻4引擎基础
-
洛谷P5733 【深基6.例1】自动修正经典解法
-
Employee_Tracker_ManageYourCompany:BCS家庭作业周12-源码
-
ScrapytIems.py
-
MxsDoc运行环境(Windows)
-
100分钟定时关机,10分钟提醒程序
-
让IT与SOA解决方案中的卫生信息交换需求保持一致
-
MySQL 四类管理日志(详解及高阶配置)
-
MySQL 高可用工具 DRBD 实战部署详解
-
OpenCV-学习历程22-像素重映射(cv::remap)
-
很多朋友都是从此绝交的,故事很短,却说穿了人性!
-
Unity 热更新技术-ILRuntime
-
中国移动设备用户体验调研报告
-
精益开发治理的最佳实践,第3部分:角色和政策
-
平面型四光纤耦合系统的研究