现在我赋值
X=10
Y=20
通过vb返回到电脑中开辟内存放置这两变量的值,好,这时它们是以什么形式存在的?
二进制码吗?那好,这样的话它们的码是用原码00001010B跟10010100B存在的还是以补码00001010B跟11101100B储存在内存中的呢?这时,vb编程再来一个语句
Z=X-Y,那么Z的运算应该如何。希望具体点,困扰了我很久啊!
先从内存取出,这时机器要翻译成原码以后再计算然后再翻译成补码存储在内存中,还是直接对补码操作,00001010B+11101100B=11110110B,这个算式在哪做的?在一个新的动态内存空间吗,将X、Y搞出来然后又算?之后做完算式了直接将11110110B存储就可以了吧!这样的话我们每次操作在显示器显示出来不是很复杂吗?每次都要二变十进制。
我说乱了,不要看上面了,就是赋值X=10,Y=20,它们内存存储时是补码00001010B跟00010100B,然后计算Z=X-Y时怎么知道加符号后内存里的00010100B要取补码,因为取了补码后就变成11101100B,多了一步,之后才加法器启动00001010B+11101100B=11110110B,我是觉得很奇怪,这个运算是应该是内存中直接工作加减的吧,为什么多了到工序呢?难道之前取值前还有if判断模块?求指导!
计算机中编程编码问题
答案:3 悬赏:30 手机版
解决时间 2021-02-01 19:58
- 提问者网友:最美的风景
- 2021-01-31 23:48
最佳答案
- 五星知识达人网友:执傲
- 2021-02-01 00:24
我看了一下书和部分汇编代码
首先,计算机中有符号整数是补码表示的;
而且加法就是直接将两个数的补码的二进制位相加,
(计算机中引入补码表示就是为了方便加减法的,注意可能有溢出情况)
减法是先求减数的补码再相加;
不是取值前有if判断模块,是因为
汇编码中在做加法时是 add 指令 减法时是 sub指令,这样在做减法时系统自然就知道取补码了
这时C语言减法的部分汇编码,VB中汇编码大同小异
5: int x=10;
00401048 mov dword ptr [ebp-4],0Ah
6: int y=20;
0040104F mov dword ptr [ebp-8],14h
7: int z=x-y;
00401056 mov eax,dword ptr [ebp-4]
00401059 sub eax,dword ptr [ebp-8] //如果是加法则是add
0040105C mov dword ptr [ebp-0Ch],eax
8: }
呵呵,还有什么问题可以多交流。
首先,计算机中有符号整数是补码表示的;
而且加法就是直接将两个数的补码的二进制位相加,
(计算机中引入补码表示就是为了方便加减法的,注意可能有溢出情况)
减法是先求减数的补码再相加;
不是取值前有if判断模块,是因为
汇编码中在做加法时是 add 指令 减法时是 sub指令,这样在做减法时系统自然就知道取补码了
这时C语言减法的部分汇编码,VB中汇编码大同小异
5: int x=10;
00401048 mov dword ptr [ebp-4],0Ah
6: int y=20;
0040104F mov dword ptr [ebp-8],14h
7: int z=x-y;
00401056 mov eax,dword ptr [ebp-4]
00401059 sub eax,dword ptr [ebp-8] //如果是加法则是add
0040105C mov dword ptr [ebp-0Ch],eax
8: }
呵呵,还有什么问题可以多交流。
全部回答
- 1楼网友:愁杀梦里人
- 2021-02-01 01:49
八进制十六进制只是人写起来方便而已
真正的计算机只能接受二进制编码,而且,你以为它能读键盘吗?还是可以听得懂你说的1 和0?
计算机接受1、0的方式是通过穿孔纸带,在纸带上打孔,有孔表示1,没孔表示0,这样输入程序的。
- 2楼网友:逃夭
- 2021-02-01 01:17
CPU内部含有取补码电路的,如果你是加法,那么取补码电路不工作,直接把内存数值传到加法器,如果是减法,那么取补码电路就先求补然后传到加法器。
不懂可以按“在线交谈”
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯