重拾C,一天一点点
数据类型及长度
char 字符型,占用一个字节
int 整型,通常代表特定机器中整数的自然长度
short 16位
int 16位或32位
long 32位
各编译器可根据硬件特性自主选择合适的类型长度,但要遵循下列限制:short与int类型至少为16位,long至少为32位,并且short类型不得长于int类型、int类型不得长于long类型。
float 单精度浮点型
double 双精度浮点型
signed与unsigned 用于限定char类型或任何整型。unsigned无符号,总是正值或0,并遵守算术模2n(n次方)定律,其中n是该类型占用的位数。如果char对象占用8位,那么unsiged char类型变量取值范围为0-255,而siged char类型取值范围则为-128-127。
31 十进制 25-1
037 八进制
0x1F/0X1f 十六进制
31 = 32 - 1 = 25 – 1 = (24 + 23) + ( 22 + 21 + 20)= (24/8) + 7 = 037
= 24 + (23 + 22 + 21 + 20) = 16/16 + 15 = 0X1f
后缀L表示long类型,后缀U表示unsiged类型。0XFUL是一个unsiged long类型的常量,对应十进制数15。
一个字符常量是一个整数,用单引号括起,如’x’。字符在机器字符集中数值就是字符常量的值。例如,在ASCII字符集中,字符’O’的值是48。
“hello ””world” 等同 “hello world”
字符串的内部表示使用一个空字符“\0”作为串的结尾,因此,存储字符串的物理存储单元数比括在双引号中的字符数多一个。
枚举是一个常量整值的列表,例如:
enum Boolean{NO,YES};
在没有显式说明的情况下,enum类型中第一个枚举名的值为0,第二个为1,依此类推。
enum months{JAN=1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
FEB的值为2,MAR的值为3。
不同枚举中的名字必须互补相同,同一枚举中不同的名字可以具有相同的值。
相对于#define语句,enum的优势在于常量值可以自动生成。
声明
int lower,upper,step;
char c,line[1000]
或
int lower;
int upper;
int step;
char c;
char line[1000] //此形式占用较多空间,但便于向各声明语句中添加注释。
声明变量时并初始化
char esc = ‘\\’;
int i = 0;
int limit = MAXLINE +1;
float eps = 1.0e-5;
如果变量不是自动变量,则只能进行一次初始化操作。
外部变量与静态变量将被初始化为0,未经显式初始化的自动变量的值为未定义值(即无效值)。
任何变量的声明都可以使用const限定符限定,该限定符指定变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改。
const限定符也可配合数组参数使用,它表明函数不能修改数组元素的值。
- #include <stdio.h>
- #include <stdbool.h>
- bool is_leap_year(int year);
- main(){
- bool b1,b2;
- b1 = is_leap_year(2000);
- b2 = is_leap_year(2001);
- printf("%d\n%d",b1,b2); //1 0
- return 0;
- }
- bool is_leap_year(int year){
- return (0 == year % 4 && 0 != year % 100) || 0 == year % 400 ? true : false;
- }
- #include <stdio.h>
- int atoi(char s[]); //注意后面的分号
- main(){
- int i;
- i = atoi("1999");
- printf("%d",i);
- return 0;
- }
- /**一串数字转为相应的数值**/
- int atoi(char s[]){
- int i;
- int n = 0;
- for(i=0; s[i] >= '0' && s[i] <= '9'; i++){
- n = 10 * n + (s[i] - '0');
- }
- return n;
- }
- #include <stdio.h>
- int lower(int c){
- return c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c;
- }
- main(){
- char unsigned s = 'A';
- printf("%d",lower(s));
- return 0;
- }
注:将字符型转换为整型时,C语言没有指定char类型的变量的符号类型(signed或unsigned)。当一个char类型的值转换为int类型的值时,其结果,在某些机器中,如果char类型值的最左边一位是1,则转换为负整数(进行“符号扩展”),而在另一些机器中,左边可能添加0,值为正整数。
C语言的定义保证了机器的标准打印字符集中的字符不会是负值,因此,在表达式中这些字符正值。但是,在存储在字符变量中的位模式在某些机器中可能是负值,或正值。为保证程序的可移植性,如果要在char类型的变量中存储非字符数据,最好指定signed或unsigned限定符。
一天一点点。。。
重拾C,一天一点点的更多相关文章
- 重拾C,一天一点点_2
类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...
- 重拾C
重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...
- CSS魔法堂:重拾Border之——更广阔的遐想
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——不仅仅是圆角
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 重拾Blog
上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...
- [linux]重拾linux
起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...
- 重拾qt
最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文 ...
随机推荐
- TCP/IP协议原理与应用笔记23:路由选择模块 和 路由表的设计
1. 路由选择模块 和 路由表的设计 2. 路由选择算法(路由模块在路由表中查找算法) (1)用IP分组中的目的IP地址查找路由表,使用匹配表项的下一跳地址完成分组交付 (2)匹配条件: dIP &a ...
- Sphinx 全文检索
什么是全文检索: 全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术.检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容. 简介: Sphinx是由俄罗斯人And ...
- [转]position:relative leaves an empty space
本文转自:http://stackoverflow.com/questions/5229081/positionrelative-leaves-an-empty-space 在使用relative进行 ...
- VC++ UTF-8与GBK格式转换
// 注释:多字节包括GBK和UTF-8 int GBK2UTF8(char *szGbk,char *szUtf8,int Len) { // 先将多字节GBK(CP_ACP或ANSI)转换成宽字符 ...
- ASP.NET验证控件应用实例与详解。
ASP.NET公有六种验证控件,分别如下: 控件名 功能描叙 1RequiredFieldValidator(必须字段验证) 用于检查是否有输入值 2CompareValidator(比 ...
- ASP.Net 验证控件 CompareValidator
CompareValidator 作用就是比较两个输入框所输入的值是否一致,常用来作为验证输入密码和确认密码的业务. 属性 描述 Operator 比较操作符,可选值DataTypeCheck.Equ ...
- Meta也很强
<!--http-equiv 必要属性--> <meta http-equiv="Content-Type" content="text/html; c ...
- Javascript中二级联动
主要使用到到了地址JSON格式,来做,没有涉及数据库的读取. <!DOCTYPE html><html><head> <meta charset=" ...
- 第一个项目--用bootstrap实现美工设计的首页
主要介绍在首页实现中用到bootstrap实现效果的地方. 实现如下的效果: <li> <div role="group" style="padding ...
- Ionic Android开发环境搭建 上
首先,需要下载并安装Node.js. 什么是Node.js?百科上说:Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.Nod ...