zoukankan      html  css  js  c++  java
  • 重拾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”

    字符串的内部表示使用一个空字符“”作为串的结尾,因此,存储字符串的物理存储单元数比括在双引号中的字符数多一个。

    枚举是一个常量整值的列表,例如:

           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
    %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++11的新特性lambda的小试牛刀RAII
    自动生成makefile的脚本
    关于pcre正则表达式库libpcre
    利用PHP执行SQL文件,将SQL文件导入到数据库
    Linux 系统是否适合于您?
    一个少年电脑病毒作者的独白
    PHP编程效率的20个要点
    JVM源码分析之javaagent原理完全解读
    如何更好的利用Node.js的性能极限
  • 原文地址:https://www.cnblogs.com/lltong/p/3371292.html
Copyright © 2011-2022 走看看