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位尾数的编码: 双精度数据采用 ...
随机推荐
- 在 word 中对正文和目录进行分节显示页码
使用版本 word 2016 使目录独占一页:在正文第一页的第一个字符前插入分节符下一页(布局--分节符--下一页),此时会在正文第一个字符前插入分节符.在之前插入一张空白页,用于插入目录.(插入 - ...
- 详解shell编程中2>&1用法
在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 下面看一个命令示例,然后分析下他是如何工作的: ls foo > /dev/null 2>&am ...
- HDU_3746 Cyclic Nacklace(KMP)
题目请点我 题解: 题目大意:有一个字符串s.能够在前后加入字符,使字符串成为一个循环次数至少为2的循环字符串.输出最少须要加入的字符数目. 首先能够证明题目能够等价为仅仅在末尾加入字符使满足题意.要 ...
- 【Big Data - ELK】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究 ...
- 【Linux高级驱动】触摸屏驱动的移植
触摸屏驱动的移植 流程 注意:看框架图 1.添加input.c组件 Device Drivers ---> Input device support ---> Generic inp ...
- LeetCode: Subsets 解题报告
Subsets Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset ...
- idea 自动根据屏幕代码换行
勾上即可 -- 建议不开启 有些时候从其他来源网站直接copy的代码文件会出现不勾选还会出现自动换行的情况 解决方法 新建文件 代码全部选剪过去
- VIM空格和TAB转换
在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab 对于已保存的文件,可以使用下 ...
- select理解
https://www.cnblogs.com/skyfsm/p/7079458.html
- Java知多少(62)线程同步
当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization).像你所看到的,Java为此提供了独特的,语言水平上的 ...