数据类型
思维导图

温故而知新
复习
我们知道, 计算机中, 最小的存储单位是 位(bit)
而CPU在操作数据的时候, 会使用到内存中的8个数据引脚, 我们将这么大的数据量成为 1字节(byte)
即 1 byte == 8 bit变量, 常量
一个程序是由算法和数据构成的.在一个程序中, 用来表示数据的, 我们称之为
变量或常量
变量, 是指能变化的值.
常量, 是表示不会被改变的值.
存储单位
经过我们计算机的高速发展, 我们的
字节(byte)已经不够用了.
于是, 我们出现了字(word)和双字(dword).
1 word == 4 byte
1 dword == 2 word
1 dword == 32 bit
现在,双字(dword)已经成为我们计算机最常用的单位.
整数类型
int
short
long
longlong
unsigned 我们的整数, 使用
双字(DWORD)来存储, 所以一般的, 我们的整数占用32位(bit).
类型大小
short <= int <= long
longlongC语言标准中, 并没有明确规定数据类型的大小, 这些都是约定俗成的.
int 32bit (Windows下)
short 16bit
long 32bit (Windows下, 有些系统不同.)
longlong 64bit
unsigned * 无符号位, 全部用来表示数值, 需配合上边的4个类型使用.
内存分配和存储
每一个变量其实都是一个代号, 代表的是内存地址的编号和所占内存空间大小的综合体.无论我们定义的变量是
int还是unsigned int, 在内存中的存储内容都是一样的.
比如我们如下代码:/************************************************************************* > 文件名: lesson10.node01.c > 作者: 花心胡萝卜 > 邮箱: hxhlb@hxcarrot.com > 创建时间: 2016-09-09 22:28:44 ************************************************************************/ #include <stdio.h> int main() { unsigned int uiValue = 0xFFFFFFFF; int iValue = 0xFFFFFFFF; printf("uiValue:%u\n", uiValue); printf("iValue:%d\n", iValue); printf("uiValue 使用 %%d: %d\n", uiValue); printf("iValue 使用 %%u: %u\n", iValue); iValue += 1; uiValue += 1; printf("iValue + 1 使用 %%d 和 %%u: %d, %u\n", iValue, iValue); printf("uiValue + 1 使用 %%d 和 %%u: %d, %u\n", uiValue, uiValue); return 0; }我们的运行截图如下:
![]()
可以看到, 我们最终输出的值, 和我们使用什么样的解析(转换)方式有关, 而在内存中, 它都是一样的.
不同的解析方式, 会导致不同的表现结果. (0xFFFFFFFF+1)试一下
我们必须选择正确的转换控制符才能正确的获取结果.
从本质看问题
根据上面的例子, 我们可以发现, 仅针对整数类型而言, 我们在内存中存储的内容是一样的.
我们利用 unsigned int 类型的最大数值 0xFFFFFFFF + 1, 在内存中, 所有的位都会变成0.
而运行结果也显而易见的证明了我们的计算. 所以我们得出结论:
我们只要确定, 我们内存中的数值是正确的, 就可以了.
我们使用不同的解析方式, 就会产生不同的表现结果.
我们必须选择正确的转换控制符才能正确的获取结果.
作业
1. 使用正确的占位符打印出 int, long, longlong 的最大值和最小值.(有符号)
2. 请写出一个16进制数的溢出有符号和无符号的long型.
3. -12345在无符号 int 中值为多少?如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2016-10-06 at 03:12 pm