参考资料
Anki制卡知识点
.a#变量,整型.a#
.|整型都有哪几种?
.|有符号的:int , short, long
无符号的:unsigned int, unsigned short, unsigned long
其中,short是short int的简写, long是long int的简写
.+
.|int类型是多少位
.|一般是16位,和具体操作系统定义有关
.+
.|short类型是多少位
.|与int一样,也是16位
.+
.| long类型是多少位
.|一般是32位
.+
.|什么是原码?
.|将一个整数转成二进制表示,就是原码,如12转成二级制为1100
.+
.|反码的计算方法是什么?
.|正数:反码与原码相同
负数:保留符号位不变,其他各位取反。
数字:-12
原码:1000 1100
反码:1111 0011
.+
.|补码的计算方式是什么?
.|正数:补码与原码相同
负数:在原码的基础上,符号位不变,其余各位取反,再加1
数字: -12
原码:1000 1100
反码:1111 0011
补码:1111 0100**
.+
.|补码如何转为原码?
.|补码的补码就是原码
-12
补码:1111 0100
取反:1000 1011
加1: 1000 1100
该数对应的就是-12的原码。
.+
.|在计算机内存中,以什么码来存储整数?
.|补码
.+
.|下面的代码输出内容是什么?
#include
short i = 0XFFFF;
printf(“>>>>>1: %x \n”, i);
printf(“>>>>>2: %d \n”, i);
printf(“>>>>>3: %u \n”, i);
}
.|输出如下:
1: ffffffff
>>>>>2: -1
>>>>>3: 4294967295
因为0xffff是正数,补码和原码相同,所以存入内存时,直接存储的是0xffff。
但是将其以有符号整型输出时,0xffff会被当做一个负数(因其首位为1)。
计算下补码0xFFFF对应的数字原码:
取反(符号位不变):1000 0000 0000 0000
加1: 1000 0000 0000 0001
对应的数字就是-1,所以%d的输出结果为-1.
而%u代表的是无符号整型,那就把0xFFFF当作是正数,正数的原码与补码相同,所以0xFFFF对应的数字是4294967295.
.|下面的这段代码,如何使用gdb查看变量在内存中的存储形式?
#include <stdio.h>int main(int argc, char *argv){short i = 0XFFFF;int j = -1;printf(">>>>>1: %x \n", i);printf(">>>>>2: %d \n", i);printf(">>>>>2: %d \n", j);printf(">>>>>3: %u \n", i);}
.|依次使用下面的命令,可以查看变量在内存中存储:
root@looook:~/code/cdemo/ex4/build# gdb test2 (gdb) break 5 (gdb) x/2x &j (gdb) x/2x &i

