整型的存储结构以及例题
来源:互联网 发布:论文检测软件免费 编辑:程序博客网 时间:2024/06/05 05:19
1==》整形变量:
整型有符号整型 无符号整型 数据长度
int unsigned [int] 32位
short[int] unsignedshort [int] 16位
long [int] unsignedlong [int] 32位
设整数在内存中用4个字节存储
10000001 10000001 10000001 10000001
00000001 10000001 10000001 10000001
如果是有符号数,则最高位是符号位,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);
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++)
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
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
-----------------
1000 0000
1111 1111
-----------------
1 0111 1111
因为char只识别8位所以1被截掉而正数的原码反码补码相等,所以答案是127. 然后进行循环,当i=255的时候 a[i]=0; strlen函数识别位置结束,所以答案为255.
验证一下
short num =32767;
short int a = num +1;
short int a = num +1;
printf("%d\n",a);
首先应该知道short识别多少位,short识别16个二进制编码,然后
// 0111 1111 1111 1111 -> 1000 0000 0000 0000 (系统直接识别为最小值,不进行解码)
验证一下结果
0 0
- 整型的存储结构以及例题
- 【十九】树以及树的存储结构
- 树的存储结构以及各自优缺点
- 栈的顺序存储结构以及实现
- 栈的链式存储结构以及实现
- 位操作、整型与非整型的存储
- 大端、小端存储以及典型例题分析
- 顺序结构、选择结构和循环结构的程序设计例题
- 内存中整型,浮点型的存储
- 存储以及分析图结构
- 关于HFile的存储结构梳理以及快速定位rowkey
- HDFS的存储结构以及操作流程简单总结
- 【一】线性表以及线性表的顺序存储结构
- 数据结构——队列的链式存储结构以及实现
- 结构体,对例题的总结
- redis存储结构以及存储格式
- Oracle的某些例题以及答案
- 单链表的整表创建和删除以及顺序存储结构和链式结构的对比
- HDU 1228 A+B
- 套接字的使用
- RecyclerView的上拉加载更多+SwipeRefreshLayout效果
- 运用“孤独九剑”解决项目实际问题(二)
- Java中小数保留问题
- 整型的存储结构以及例题
- 尝试简单的app去除广告过程
- JSTL-函数标签库
- [C++ Primer Plus] 类基础知识--使用类
- 396. Rotate Function*
- java-将xlsx(excel)文件转换成json
- (0023)iOS 开发之Mac上MySQL服务的卸载
- 1、Android基础笔试题
- C语言中的结构体指针