C语言视频 VS2015:[7]基本数据类型
1、C语言的基本数据类型其实并不多,通过msdn可以查询到,主要有如下图所示的集中基本的数据类型:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/e076d77622bc7dc58f6706ec5e460596b8142957.jpg)
2、按照字节数来分类
整数类型主要包括:
一个字节大小:char
两个字节大小:short
四个字节大小:long,int
小数类型主要包括:
四个字节:float
八个字节:double
3、按照有无符号来分又可以分为:
有符号:signed
无符号:unsigned
注:
① 整数类型系统默认的是有符号的;
② 浮点数类型只存在有符号的情况;
4、short 类型的写法:
① 有符号的,以下写法等价的:
short,signed short,short int, singed short int
② 无符号的,一下写法等价的:
unsigned short,unsigned short int
5、long 类型的写法:
① 有符号的,以下写法等价的:
long,signed long,long int, singed long int
② 无符号的,一下写法等价的:
unsigned long,unsigned short long
1、无符号整数在内存中的存储形式主要是按照16进制的形式进行存储,为了演示效果,我们需要进行如下操作:
① 新建一个C工程并输入下图所示程序;
② 在main函数的return 0前面加一个断点(快捷键F9);
③ 使用快捷键F5进入调试模式;
④ 使用快捷键Alt+6调出内存窗口;
⑤ 在地址栏输入 &wValue;
⑥ 回车;
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/c99358fe474ec28378bf165cbe4f50b8b43e1c57.jpg)
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/51f9aa3ea8db574aa832be2fa7f7dfb2dc191757.jpg)
2、① 使用快捷键 Win+R 调出运行窗口;
② 输入 calc 调出 计算器
③ 设置计算器 查看下面为程序员类型;
具体的如下图所示:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/def3c219ce2c5b1b47ded96f2b39131fceec0e57.jpg)
3、① 选择为十进制;
② 输入40000;
③ 选择16进制
具体的效果如下图所示:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/f59dbe39131fceec8dd944c679c4ec9959430b57.jpg)
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/58021a0148fe1e423b6b2962c2299a8839130357.jpg)
4、通过计算器我们可以知道
40000的16进制是:0x9C40
但是我的内存查看中显示的是 40 9C,正好跟16禁止的9C 40位置相反,
这个现象主要是由于处理器是小端的情况造成的,
计算机小端格式造成的结果是数值在内存中是:
低位存放高位的字节,高位存放低位的字节;
更多的关于低端字节的内容可以看:
http://baike.baidu.com/link?url=ExAQpfltX-cOXAUwpSYv9AzeDKHpGbTltjTpL41Qrka4muq45sy9RVlbvog9Ag3b0cJMhqClbNDLr3URcoYkUa
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/3852f6e5eceeadbcd02f6ac3cd18dfdae43b7b57.jpg)
1、为了计算的简单,这次列举的例子是
signed char 类型的变量 -10
同样进行上面的操作,后截图的效果如下图所示:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/bf6e59704618dfda963b163589214f5793567757.jpg)
2、通过上图的结果,我们知道-10在计算机内存中存储的16进制值是 F6
于是问题来了:
3、F6是怎么算出来的?
① 获取 -10 的绝对值:10
② 将 10 转化成16进制:A
③ 对16进制的A各位取反:F5
注:取反就是将数据的二进制形式的中 0变成1,1变成0,如:
A的二进制形式是:0000 1010
对A取反就是:1111 0101
转化成16进制就是:F5
④ 对F5 进行+1操作:F6
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/52fae62064fb960b4a2128d28fa355e983ae6c57.jpg)
4、为什么是F6呢?
这里主要主要涉及到一个补码的概念,其实在计算机的底层,是只有加法没有减法的,所谓的减法的计算,是通过将 减数 跟前面的减号一起作为一个整体,如
5 - 3 => 5 + (-3) ,然后进行的加法运行;
负数通过转成对应的补码,如-3的补码可以算出来:
① -3 的绝对值:3
② 3的二进制形式:0000 0011
③ 对3取反: 1111 1100
④ 3的补码:FC
⑤ 5 + FC 结果的16进制形式:1 02
由于是一个字节的大小,所以数据溢出了,高位的1 被舍弃了,就剩下了随后的02,于是结果便是2;
更多的关于补码的问题可以参考:
http://baike.baidu.com/link?url=eECw_IYc27hoeix4F0EGGGWMaxkxIQ_k0gW0LoBUCcf5lVMMjg-L_Bh9hcfjZSzp0dCxBEBywVADjfX1nEEPrK
1、这里举的例子是float类型的值:1.25;
通过查看内存可以知道它在内存中存储的16进制值是:00 00 a0 3f
由于计算机是小端的,所以它实际的16进制值是:3f a0 00 00
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/82eff6d7592ae3ef6378398254b6326c57666457.jpg)
2、制的 3f a0 00 00 对应的二进制是:
0011 1111 1010 0000 0000 0000 0000 0000
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/988e1c532f6323856c36cf22cce833e039725d57.jpg)
3、单精度浮点数占4个字节32位,其中的各位的具体分布如下图所示:
符号位:第31位,其中0表示正数,1表示负数
指数位:第30-23位共8位,由于指数值没有正负数之分,而指数位又是0开始的,所以实际的0对应的值是7F,0对应的值是最小的指数16进制的-7F即10进制的-127,指数计算是:当前值减去 127 就是实际的指数值;
数据位:第22-0位共23位,由于数据位存储的是数据中小数点后面的部分,而数据是按照科学计数法存储,所以最高位永远是1,为了节省空间,计算机省略了最高位的1,所以实际的值应该是当前的值+1;
具体例子看下图,下图演示了1.25和0这两个数据的情况:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/46a92de039723d0329ea1335bb486143d7d45757.jpg)
4、双精度浮点数占8个字节64位,其中的各位的具体分布如下图所示:
符号位:第63位;
指数位:第62-52位共11位;
数据位:第51-0位共52位;
双精度浮点数的计算过程同单精度的一致;
5、方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/49701aebf6a75f0f192b595d97324b18512c4c57.jpg)
1、Visual Studio 2015也存在着一下扩展的基本数据类型:
① wchar_t
② __int64
③ long long
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/836a6aee1c324b18ce2ca14253a7263348844857.jpg)
2、wchar_t:表示的unicode字符,在Windows系统上通常我们也可以称为宽字符,他的大小占用2个字节,没有 signed 和 unsigned 的区别,它有些类似于char 的类型,但是用字符进行赋值的时候,需要使用 L' ' 来赋值,如下图所示:
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/8db0c6a72633488469e3669fddee7b7f860e4557.jpg)
3、__int64:表示的是64位的整数,占8个字节,他的用法跟int类似,但是他的位数更高,精度更高,存在 signed 和 unsigned 的区别,默认的没有修饰的是signed的类型;
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/57af657f860e7c754ff4d146650d3aceaad7bf57.jpg)
4、long long:跟 __int64 的作用一样
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/3b8fb4d7726b0ce2d4e719bcef781423beb9b657.jpg)
5、方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
![C语言视频 VS2015:[7]基本数据类型](https://exp-picture.cdn.bcebos.com/354e7a781423beb9c03e0c7130d6e1d06de8b357.jpg)