01-2带符号数的代码表示
- 格式:ppt
- 大小:362.00 KB
- 文档页数:62
前言我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。
而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。
第1.1例 ASC函数一、题目: 要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。
二、代码:Sub 示例_1_01()Dim myNum1%, myNum2%myNum1 = Asc("Excel") '返回69myNum2 = Asc("e") '返回101[a1] = "myNum1= ": [b1] = myNum1[a2] = "myNum2= ": [b2] = myNum2End Sub三、代码详解1、Sub 示例_1_01():宏程序的开始语句。
2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。
也可以写为 Dim myNum1 As Integer 。
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
Integer 的类型声明字符是百分比符号 (%)。
3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。
Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。
语法Asc(string)必要的 string(字符串)参数可以是任何有效的字符串表达式。
如果 string 中没有包含任何字符,则会产生运行时错误。
4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。
即:中文内码之一,代表中文,在广泛使用,影响所及,使用量渐见普及。
“国家标准信息交换用汉字编码”(GB2312-80标准),简称国标码。
国标码是指1980年中国制定的用于不同的具有处理功能的计算机系统间交换汉字信息时使用的编码。
国际码是二字节码, 用两个七位二进制数编码表示一个汉字。
目前国标码收入6763个汉字, 其中一级汉字(最常用)3755个, 二级汉字3008个, 另外还包括682个西文字符、图符。
例如“巧”字的代码是39H 41H, 在机内形式如下: 0 1 1 1 0 0 1 1 第一0 0 0 0 0 1第二字节在计算机内部,汉字编码和西文编码是共存的,如何区分它们是个很重要的问题,因为对不同的信息有不同的处理方式。
方法之一是对于二字节的国标码,将二个字节的最高位都置成“1”, 而码所用字节最高位保持“0”,然后由软件(或硬件)根据字节最高位来作出判断。
字符代码化是指用户从键盘上输入代表某个汉字的编码。
我们把采用不同的编码系统以代表汉字进行输入的方案(如数字码、拼音码和),称为汉字的输入法,、五笔字型码、拼音码、、拼音输入法等都是其中的具体代表。
汉字通过编码输入计算机后,在其后的处理过程中,不同阶段使用不同的代码,首先通过键盘管理程序将接收到的输入编码转换为0和1构成的机内码,实现计算机的存储、加工和传输处理。
同样,存储在计算机内部的机内码也必须经转换后才能恢复汉字的“本来面目”。
这种转换通常是由计算机的输入/输出设备来实现的, 有时还需要软件来参与这种转换过程。
这个阶段的汉字代码称为字形码,用以显示和打印输出。
区位码:1980年,为了使每一个汉字有一个全国统一的代码,我国颁布了第一个汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。
国标码是一个四位十六进制数,区位码是一个四位的十进制数,每个国标码或区位码都对应着一个唯一的汉字或符号,但因为十六进制数我们很少用到,所以大家常用的是区位码,它的前两位叫做区码,后两位叫做位码。
一、CPU只会根据输入信号进行逻辑运算,在硬件级别是没有有符号无符号的概念,运算结束会根据运算前的信号和输出信号来设置一些标志位,是不是有符号由写程序的人决定,标志位要看你把操作数当有符号还是无符号来选择,就像内存中的数据,你可以按照需要来解析,原始数据在那里,你要按什么数据格式来解析在于自己的选择,所以玩汇编的要做到心里有数,加减法只有一套指令,因为这一套指令同时适用于有符号和无符号。
下面这些指令:mul div movzx … 是处理无符号数的,而这些:imul idiv movsx … 是处理有符号的。
举例来说:内存里有一个字节x 为:0x EC ,一个字节y 为:0x 02 。
当把x,y当作有符号数来看时,x = -20 ,y = +2 。
当作无符号数看时,x = 236 ,y = 2 。
下面进行加运算,用add 指令,得到的结果为:0x EE ,那么这个0x EE 当作有符号数就是:-18 ,无符号数就是238 。
所以,add 一个指令可以适用有符号和无符号两种情况。
(呵呵,其实为什么要补码啊,就是为了这个呗,:-))乘法运算就不行了,必须用两套指令,有符号的情况下用imul 得到的结果是:0x FF D8 就是-40 。
无符号的情况下用mul ,得到:0x 01 D8 就是472 。
二、C又是可怕的,因为它把机器层面的所有的东西都反应了出来,像这个有没有符号的问题就是一例(java就不存在这个问题,因为它被设计成所有的整数都是有符号的)。
为了说明c的可怕特举一例:#include <stdio.h>#include <string.h>int main(){int x = 2;char * str = "abcd";int y = (x - strlen(str) ) / 2;printf("%d\n",y);}结果应该是-1 但是却得到:2147483647 。
三进制表示方法三进制是以3为基数的进位制,三进制数有0、1、2三个数码,逢三进一。
在计算机发展的早期,采用了一种偏置了的三进制(对称三进制),有-1<一般用T表示,特殊条件下用Z或z表示>、0、1三个数码,这种三进制逢+/-2进一。
定义三进制是以3为底数的进制,逢三进一、退一还三。
三进制采用0、1、2三个数码,从小数点往左依次是个位、三位、九位、二十七位…,小数点往右依次是三分位、九分位、二十七七分位…。
计算机发展的早期,有采用一种偏置的三进制——对称三进制,对称三进制采用-1、0、1三个数码。
对称三进制,能比二进制更自然的表示整数,绝对值比较小的整数位数比较少(省略第一非零位前面的零)。
对称三进制的逻辑通常应用于决策,比如投票有赞成、反对、弃权;交易有买进、卖出、观望,复式记账法体现了对称三进制的思维。
SQL数据库系统采用了三值逻辑,是对称三进制的应用。
也有人设计了三进制钞票面额系统。
下面有个例子采用对称三进制解决问题。
下面举一例:三进制数是以下问题的答案:允许在天平两端放置砝码,问N个砝码如何才能称出最多的整克物体?答案:1.一个砝码取1克,只能称1克。
2.二个砝码取1克,3克右盘3,左盘1。
称2克右盘3。
称3克右盘1,3。
称4克3.三个砝码取1克,3克,9克右盘9,左盘1,3。
称5克右盘9,左盘3。
称6克右盘9,1,左盘3。
称7克右盘9,左盘1。
称8克右盘9。
称9克右盘9,1。
称10克右盘9,3,左盘1。
称11克右盘9,3。
称12克右盘9,3,1。
称13克4.四个砝码取1克,3克,9克,27克。
............其中的1,3,9,27,81等都是三进制数的数位。
一些常见的十进制数换三进制表表示形式三进制一般有两种表示形式:一种是以0,1,2为基本字符的表示形式。
例如,365在这种表示形式中的写法是111112。
一种是以-1,0,1为基本字符的表现形式。
例如,365在这种表示形式中的写法是1TTTTTT(以T表示-1,负号置于1之上的象形)。
verilog 中使用有符号数分类:资料摘录2011-05-09 17:161213人阅读评论(2)收藏举报目录(?)[+]在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合;也可以使用有符号数,即包括0和正负数的集合。
在更加复杂的系统中,也许这两种类型的数,我们都会用到。
有符号数通常以2的补码形式来表示。
图1列出了4位二进制表示法所对应正负数。
进一步观察,我们发现两种类型数的加减法是一样的,做加法和减法就是在数轮上按正时钟转转或按反时钟转。
比方说,1001+0100,意味着从1001按照顺时钟方向移动4个位置,其结果为1101。
在无符号数类型中,它代表(+9)+(+4)=+13;而在有符号数类型中,它则代表(-7)+(+4)=-3。
从数轮上看,若是加法所得的结果溢出了,那么也就是穿越了数轮的临界点。
注意这个临界点对于无符号数和有符号数来说,是不一样的:无符号数,是介于1111和0000之间;有符号数,则是介于0111和1000之间。
物理加减法的行为正好和数轮的移动类似。
只要所有的运算子和结果具有相同的位宽,那么有符号数或无符号数的形式就可用于相同的电路。
比方说,设a、b和sum 都是8位信号,表达式1sum = a+ b;无论这些信号被转译成有符号数或无符号数,它都会引用相同的硬件且使用相同的二进制表示法。
这种现象在其他算术运算中也是正确的(但是它不可用于非算术运算中,比方说有理数运算或溢出标志位的生成)。
图1 4位二进制数轮此外,当运算子或其结果的位宽不同时,我们需要区分它究竟使用哪一种符号类型。
因为不同的符号类型需要不同的扩展位。
对于无符号数,前置一个0,即所谓的零扩展位;对于有符号数来说,需要前置n个所谓的符号扩展位。
比方说4位二进制表示的-5为1011;当其扩展成8位时,应该变为1111_1011,而不是0000_1011。
举个例子,设a和sum为8位信号,b为4位信号即b3b2b1b0。