本节的内容:数据的表示和运算
参考资料:408真题
涉及的知识点:
补充知识
大端对齐与小端对齐
大端对齐模式,是指一个字节中的高位字节放在这个字区域内的低地址处。
小端对齐模式,是指一个字节中的低位字节放在这个字区域内的低地址处。(最常用)
将一个32位的16进制数0x12345678存放在内存中(机器按字节编址)
实际上,小端模式就是从后面往前面存储的。
常用的进制转换数及一些技巧
127 = 7FH = 0111 1111B
128 = 80H = 1000 0000B
255 = FFH = 1111 1111B
65535 = FFFFH = 1111 1111 1111 1111B
算大的数可以用16进制数方便计算,十进制转二进制也可以转换为16进制再转换为2进制。
按边界对齐
按边界对齐?简单的说,对于int型而言,起始地址为4的倍数;对于char类型而言,起始地址为任意字节皆可;对于short类型而言,起始地址为2的倍数;对于结构体而言,对齐方式为结构体内类型最大的字节量。
强制类型转换
第一道题
分析:
算式显然是 int = int +short 类型,一定存在强制类型转换,那么short ->int 需要添加扩展位,注意,机器中的数用补码表示的,所以结果用补码运算。过程如下:
图中虚线左边的是16进制数,右边是2进制数,由于答案是16进制数,我们便化为16进制数进行加减。
同时,特别注意,负数的补码,是除了符号位以外取反后加
一,正数的补码等于原码等于反码。
考点:强制类型转换,码制间的转换运算
第二道题
分析:短字节向长字节的转换,高位的扩展位变为对应的符号位。
第三道题
分析:无符号与有符号之间的相互转换,主要看对符号位的解释,将符号位当成符号就是有符号数,当成真值解释就是无符号数。机器中用补码表示数。
定点数基本运算及存储方式
第一道题
分析:
这是一道表面考定点数补码的乘法的问题,但是学过的都知道,乘法的计算太啰嗦了,而且要记忆的东西步骤也极为麻烦,所以出在考试大题不大可能,出现在选择题更不可能,而这个题目,一开始就让我们计算四个数分别相乘的组合。老老实实做,那么做完你也应该快考完了。所以换个角度,直接判断是否溢出,将它们化为10进制真值,用结果看看能不能用8位表示。说白了还是考码制之间的转换。
考点 :码制间的转换与运算,溢出判断
解答;
第二道题
分析:关键词按字节编址,按边界对齐,小端方式。我们知道int是占用4个字节的,char1个字节,short为2个字节,加起来要7个字节,但是实际上是8个。因为它按边界对齐。我们注意到,按顺序short应该到D,但是D = 13,不是2的倍数,所以从E开始存储。
所以过程如下:
第四道题
分析:如果直接死脑筋算的话,很是麻烦,看看有没有好的办法,二进制数对2的乘除,就是移位操作,乘上一个2,左移。除去一个2,右移。实在忘记了,就举个10进制的例子:
2 X 10 = 20 //相当于将2左移一位
20/10 = 2 //相当于把20右移了一位。这样就好办了:
再来两道一模一样的真题:
用上面的方法做,原理都是一样的,答案分别为 C A