C和C指针小记(三)-整型,char,枚举
1、C语言基本数据类型-整型
仅有4中机泵数据类型:整型,浮点型,指针,聚合类型(数组和结构)
整型家族:字符,短整型,整型,长整型.(都分有符号[singed]和无符号[unsinged])
短整型,整型,长整型之间的大小规则:
长整型至少应该和整型一样长,而整型至少应该和短整型一样长.
| 类型 | 最小范围 |
| char | 0 ~ 127 |
| signed char | -127~127 |
| unsigned char | 0~255 |
| short int | -32767~32767 |
| unsigned short int | 0 ~ 65535 |
| int | -32767 ~ 32767 |
| unsigned int | 0 ~ 65535 |
| long int | -2147483647~2147283647 |
| unsigned long int | 0~4294967295 |
也可参考limit.h 头文件,查看不同类型的特点.
2、char的有符号与无符号之分
设计char类型变量的目的是为了让它们容纳字符型值,但字符在本质上是小整型.缺省的char要么是signed char, 要么是 unsigned char,这取决于编译器.
这意味着不同机器上的char可能拥有不同范围的值.所以,只有当程序所使用的char 型变量的值位于signed char 和 unsigned char 的交集中,这个程序才是可移植的.
例如ASCII字符集中的字符都是位于这个范围之内的.
在一个把字符当作小整型值的程序中,如果显式的把这类变量声明为signed 或 unsigned,可以提高这类程序的可移植性.
这类做法可以确保不同的机器中在字符是否为有符号值方面保持一致.另一方面,有些机器在处理 signed char 时得心应手,如果硬把它改成
unsigned char ,效率可能受损,所以把所有的char 变量统一生成 signed 或 unsigned未必是上上之策.
而且,许多处理字符的库函数把他们的参数声明为char,如果你把参数显式的声明为 unsigned char 或者 signed char.可能会带来兼容性问题.
3、整型字面值
字面值(literal)这个术语是字面值常量的缩写,一种指定了自身的值并且不允许发生改变.
和普通变量极为类似,区别是字面值被初始化之后不允许修改.
当一个程序中出现字面值时,它是属于整型家族9种中的哪一种呢?答案取决于字面值是如何书写的.也可以在某些字面值后面添加一个后缀来改变缺省的规则.
如:在整数字面值后面加字符L或l,可以是这个整数被解释为long整型值,字符U或者u则用于把数值指定为 unsigned整型值.
字符常量.
他们的类型总是int.你不能在他们后面添加unsigned 或 long 后缀.字符常量就是一个用单引号包围起来的单个字符(字符转义序列或三字母词).
如:'M' '\n' '??)' '\337'
C标准也允许诸如'abc'这类的多子节字符常量,但它们的实现在不同的环境中可能不一样,所以不鼓励使用.
如果一个多字节字符常量的前面有一个L,那么它就是宽字符常量(wide character literal)
如: L'X' L'e^'
当运行时环境支持一种宽字符集时,就可能使用他们.
注意:
整型字面值的书写形式有很多,但是对编译器来讲都一样.
如何把一个字符转换为二进制值: value = value - '0';
枚举类型:
枚举(enumerated)类型就是指它的值为符号常量而不是字面值的类型.他们以下面这种形式声明:
enmu Jar_Type{
CUP,
PINT,
QUART,
HALF_GALLON,
GALLON
};
这样就声明来一个枚举类型,称为Jar_Type.
声明该类型的变量方式:
enmu Jar_Type milk_jug, gas_can, medicine_bottle;
如果某种特别的枚举类型的变量只是用一个声明,你可以把上面两条语句组合成:
enum {
CPU,
PINT,
QUART,
HALF_GALLON,
GALLON
} milk_jug, gas_can, medicine_bottle;
这种类型的变量是以整型的方式存储的,这些符号名的实际值都是整型值.
如CPU是0, PINT是1,以此类推.
当然也可以为这些符号指定特定的值,
enum {
CPU = ,
PINT = ,
QUART = ,
HALF_GALLON = ,
GALLON =
};
C和C指针小记(三)-整型,char,枚举的更多相关文章
- C和C指针小记(十三)-数组
1.1 一维数组 一维数组的声明: int a[10]; 这里a就是一个数组. 数组a的类型就是一个指向整型的常量指针. 但是数组和指针是**不相同**的. **数组具有特定数量的元素,而指针只是一个 ...
- 指针直接赋值为整型AND利用宏定义求结构体成员偏移量
首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数; 除外,该语句表示指针为空): 所以 ; 这样的代码是不允许的. ...
- 007——转载——C#将字符串转换为整型的三种方法的总结
(一)转载——C#将字符串转换为整型的三种方法的总结 在C#中,要将一个字符串或浮点数转换为整数,基本上有三种方法: (1)使用强制类型转换:(int)浮点数 (2)使用Convert.ToInt32 ...
- c语言中指向整型指针的指针的理解
/************************************************************************* > File Name: ptr_ptr_i ...
- python小白入门基础(三:整型)
# Number(int float str complex) #int 整型(正整数 0 负整数)intvar_1 = 100print(intvar_1)invar_2 = 0 print(inv ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- [C和指针]第三部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Go语言类型(布尔、整型、数组、切片、map等)
1.基本类型 布尔类型:bool 注意:布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换. 整型:int8.byte(uint8).int16.int.uint.uintptr int.ui ...
- __c语言__整型、实型的存储(十进制转二进制)
float 和 double 类型数据在内存中的存储方法 无符号整型采用32位编码,带符号整型数采用1个符号位31位底数编码: 单精度数据采用了1位符号位,8位阶码,23位尾数的编码: 双精度数据采用 ...
随机推荐
- Spark 准备篇-基本原理
本章内容: 待整理 参考文献: <深入理解SPARK:核心思想与源码分析>(第2章) Spark的作业提交及运行流程的异同
- FragmentPagerAdapter 与 FragmentStatePagerAdapter 的区别
参考链接: http://blog.csdn.net/dreamzml/article/details/9951577 简单来说前者适合静态.少量的Fragment 后者适合动态.较多的Fragmen ...
- Handler消息传递机制浅析
http://www.runoob.com/w3cnote/android-tutorial-handler-message.html https://blog.csdn.net/lowprofile ...
- Socket网络编程--简单Web服务器(4)
上一小节已经实现了对图片的传输,接下来就是判断文件是否为js,css,png等格式.我们增加一个函数用于判断格式 int WebServer::get_filetype(char *type,char ...
- 从NSTimer的失效性谈起(二):关于GCD Timer和libdispatch
一.GCD Timer的创建和安放 尽管GCD Timer并不依赖于NSRunLoop,可是有没有可能在某种情况下,GCD Timer也失效了?就好比一開始我们也不知道NSTimer相应着一个runl ...
- Go Revel - Modules(模块)
revel中的模块是一个可以插入到应用中的包, 它允许从第三方引入至应用,并在它和应用之间共享控制器.视图与资源等数据. 一个模块应当具有和revel应用相同的结构."主"程序会以 ...
- mysql 核心知识要点
整体知识介绍:mysql基本操作和使用,mysql优化(索引,分表等),mysql部署(读写分离,负载均衡等) 数据库基本介绍:数据库概念,常用数据库,web应用三大软件分工,PHP动态语言特点(处理 ...
- Gradle依赖的统一管理,解决依赖冲突
看见别人在用implementation rootProject.ext.dependencies["xxxx"]不知道是什么意思,上网查了一下,原来是为了解决或者说预防gradl ...
- .Net Framework4.5.2 源码命名空间简析
Miscosoft目前除.Net Core开源外,对于.Net4.5.1 , 4.5.2等后续版本同样开源.资源中包含sln,csproj等以方便我们在vs中打开它们,不过我们不能编译它,因为它缺少r ...
- json 字符串包含数组转换为object对象是报异常java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
前台传到后台的json字符串 前台实现这种格式json字符串方式: function contentFun(){ respType = respTypeFun(); return "{\&q ...