整型的存储结构以及例题
2017-01-16 21:39
417 查看
1==》整形变量:
整型有符号整型 无符号整型 数据长度
int unsigned [int] 32位
short[int] unsignedshort [int]
16位
long [int] unsignedlong
[int] 32位
设整数在内存中用4个字节存储
10000001 10000001 10000001 1000
0001
00000001 10000001 10000001 1000
0001
如果是有符号数,则最高位是符号位,1表示负数,0表示正数。
数值的表示方法-原码 反码 补码
正数的原码、反码和补码相同
1 的补码
0 000 0000 0000 0000 0000 0000 0000 0001
……
2147483647的补码
0 111 1111 1111 1111 1111 1111 1111 1111
负数的原码、反码和补码不同
-1
原码 1 000 0000 0000 0000 0000 0000 0000 0001
反码 1 111 1111 1111 1111 1111 1111 1111 1110 原码取反
补码 1 111 1111 1111 1111 1111 1111 1111 1111 反码+1
-32767
原码 1 000 0000 0000 0000 0111 1111 1111 1111
反码 1 111 1111 1111 1111 1000 0000 0000 0000 原码取反
补码 1 111 1111 1111 1111 1000 0000 0000 0001 反码+1
这些东西其实在哪里都能看到,但是整形存储还是有很多的猫腻的,做几个例题
2==》 小例题
1.
unsigned i;
for(i =9; i >=0;
i--)
{
printf(“%u\n”,i);
}
这道题需要注意的是%u %u %u。重要的事情说三遍。
先看看运行的结果
答案很明显是一个死循环,那么这是为什么呢首先可以看到从9到0我们都可以理解。
现在到0了,0这里很关键,因为你是%u打印的,所以现在有32位0的二进制序列,
0000 0000 0000 0000 0000 0000 0000 0000
减去1,这时候的二进制序列为
1111 1111 1111 1111 1111 1111 1111 1111
如果是%d情况下这是补码,需要求出它的原码 求出来的时候刚好等于-1.
但是%u并不会买账,它有自己的打印方式,他不认识符号位,就照着全1的二进制序列输出,
所以值为4294967295,剩下的就以此类推,所以就变成死循环了。
2.
int main()
{
char
a[1000];
int
i;
for(i=0; i<1000;
i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return
0;
}
我们首先知道的是循环什么时候停止,strlen函数在什么时候回停止计数??答案是当a[i]=0的时候,char类型中0的值就是'\0'.现在我们明白了目的,开始计算。
然后开始循环,当i=127的时候知道a[i] = -128.这时候关键问题来了,我们知道char只有8个二进制编码识别,我们来算一算-128+(-1)的值
-128+(-1)
1000 0000
1111 1111
-----------------
1 0111 1111
因为char只识别8位所以1被截掉而正数的原码反码补码相等,所以答案是127. 然后进行循环,当i=255的时候 a[i]=0; strlen函数识别位置结束,所以答案为255.
验证一下
3.
short num =32767;
short
int a =
num +1;
printf("%d\n",a);
首先应该知道short识别多少位,short识别16个二进制编码,然后
// 0111 1111 1111 1111 -> 1000 0000 0000 0000 (系统直接识别为最小值,不进行解码)
验证一下结果
相关文章推荐
- 线性表以顺序表为存储结构的实现(数据元素的类型为整型)
- 浮点数在intel上的二进制存储结构,以及如何判断一个浮点数是否为整数
- hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- SSAS的存储原理以及内部结构
- 【十九】树以及树的存储结构
- HDFS的存储结构以及写入、读取hdfs数据操作流程简单总结
- 二叉树的二叉链表存储结构构建以及先序遍历
- 关于HFile的存储结构梳理以及快速定位rowkey
- 邻接矩阵的存储结构以及无向网图的创建
- 栈的链式存储结构以及实现
- 树的存储结构和图的存储结构以及图的深度优先DFS搜索和BFS广度优先搜索
- redis存储结构以及存储格式
- 静态串的存储结构以及增删改查
- HDFS的存储结构以及操作流程简单总结
- C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)
- 关于HFile的存储结构梳理以及快速定位rowkey
- [置顶] 数据结构——队列的链式存储结构以及实现
- 树的存储结构以及实现代码