C语言入门(九)之char、类型说明符

版权声明:如果觉得文章对你有用,转载不需要联系作者,但请注明出处 https://blog.csdn.net/jinxin70/article/details/83242921
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    /*
    // 研究的问题: char类型的变量在内存中是如何存储的?
    // char 1个字节
    int num;
    char charValue;
    charValue = 'a'; // 计算机智能识别0和1
    // a == 97 == 01100001
    int size = sizeof(charValue);
    printf("%i\n", size);
    printf("num = %p\n", &num);
    printf("char = %p\n", &charValue);
    
    // 在C语言中, 不看怎么存, 只看怎么取
    printf("%c\n", charValue);
    printf("%i\n", charValue);
     */
    
    /*************************华丽的分割线*******************************/
    
    /*
     字符6和数字6就是完全不相同的两个数
    char c1 = 6; // 00000110
    char c2 = '6';// 00110110
    
    printf("%i\n", c1);
    printf("%i\n", c2);
     */
    
    /*************************华丽的分割线*******************************/
    
    // char类型在某些情况下可以当做整型来用
    // 如果对内存要求特别严格, 而且需要存储的整数不超过char类型的取值范围, 那么就可以使用char类型来代替int类型
    // -2(7)~2(7)-1   == -128 ~ 127
    char c = 129; // 1000 0000
    printf("%i\n", c);
    
    return 0;
}

练习

#include <stdio.h>
char lowerCase(char temp);
int main(int argc, const char * argv[]) {
    // 要求用户从键盘输入一个字母, 如果用户输入的是大写那么就转换为小写
    
    printf("请输入一个字母\n");
    char charValue;
    scanf("%c", &charValue);
    
    // 转换
//    charValue = charValue + 32; //  65 + 32 = 97
    printf("%c\n", lowerCase(charValue));
    return 0;
}

char lowerCase(char temp)
{
    // 1.判断是否是大写字母
    if (temp >= 'A' && temp <= 'Z') {
    // 注意: 开发中千万不要这么写, 魔鬼数字
//    if (temp >= 65 && temp <= 90) {
//        temp = temp + 32;
        temp = temp + ('a' - 'A');
    }
    return temp;
}

类型说明符

1.说明长度的(它可以用于修改类型所占用的存储空间的大小)
 short; short == short int  == 2个字节 == %hi/ %hd
 long; long == long int  == 8个字节 == %li / %ld
 long long; == long long int  == 8个字节 == %lli / %lld
 
 用于说明数据类型, 一般情况下和int配合使用
 
 2.说明符号位(它可以用于修改符号位是否用于正负数)
 unsigned; 无符号 , 取值正数和零 == %u
 signed; 有符号, 默认就是有符号 , 取值 正数和零以及负数
 
 3.不同类型的说明符可以混合使用
 unsigned short
 signed long
 // 注意: 相同类型不能在一起使用
 unsigned signed

#include <stdio.h>
/*
 类型说明符:
 1.说明长度的(它可以用于修改类型所占用的存储空间的大小)
 short; short == short int  == 2个字节 == %hi/ %hd
 long; long == long int  == 8个字节 == %li / %ld
 long long; == long long int  == 8个字节 == %lli / %lld
 
 用于说明数据类型, 一般情况下和int配合使用
 
 2.说明符号位(它可以用于修改符号位是否用于正负数)
 unsigned; 无符号 , 取值正数和零 == %u
 signed; 有符号, 默认就是有符号 , 取值 正数和零以及负数
 
 3.不同类型的说明符可以混合使用
 unsigned short
 signed long
 // 注意: 相同类型不能在一起使用
 unsigned signed
 */
int main(int argc, const char * argv[]) {
    /*
    // int  == 4个字节 == -2(31)~2(31)-1
    
    int num = 12345678901;
    printf("num = %i\n", num);
    
    
    // int == 4个字节, long int == 8个字节 == -2(63)~2(63)-1
    long int num1 = 12345678901;
    printf("num1 = %li\n", num1);
    
    // long int == long
    // 用%li 或者 %ld来输出long类型的数据
    // C语言中不看怎么存, 只看怎么取
    long num2 = 12345678901;
    printf("num2 = %li\n", num2);
    
    // long long
    // 在64位变一下, 基本没区别, 但是如果是在32位就有区别
    // 32位下long占4个字节, long long 占8个字节
    // 注意: 如果使用long long修饰变量, 那么输出的时候需要使用%lli或者%lld
    long long int num3 = 12345678901;
    printf("num3 = %lli\n", num3);
    
    printf("long long  = %i, long  = %i\n", sizeof(num3), sizeof(num2));
    
    // long long int == long long
    long long num4 = 12345678901;
    printf("num4 = %lli\n", num4);
     */
    
    /*************************华丽的分割线*******************************/
    
    /*
    // int == 4个字节 == -2(31)~2(31)-1
    int num = 9; // 0000 1001
    printf("num = %i\n", num);
    
    // 如果以后需要保存的数据的取值范围没有超过short int的取值范围, 可以使用short int来保存
    // 但是在企业级开发中很少使用
    // short int == 2个字节 == -2(15)~2(15)-1
    short int num1 = 9;
    printf("num1 = %i\n", num1);
    
    // short int == short
    // 如果要输出short int类型的数据, 可以使用%hi或者%hd
    short num2 = 9;
    printf("num2 = %hi\n", num2);
    
    printf("short = %i, int = %i\n", sizeof(num1), sizeof(num));
    
    */
    
    /*************************华丽的分割线*******************************/
    
    /*
    // signed 有符号
    // 如果给变量加上修饰符signed, 代表当前变量的取值可以是正数 / 负数/ 零
    // 如果给变量加上修饰符signed, 就代表把二进制的最高位作为符号位
    // 而且默认情况下所有变量都是有符号的(signed)
    signed int num = 0;  // 正数 / 负数/ 零 int == -2(31)~2(31)-1
    printf("num = %i\n", num);
    
    // unsigned 代表无符号. 无符号就代表当前变量的取值只能是正数 / 零
    // 如果给变量加上修饰符unsigned, 就代表"不"把二进制的最高位作为符号位

    // 如果想打印无符号的变量, 只能用%u
    unsigned int num1 = -12;
    printf("num1 = %u", num1);
     */
    
    /*************************华丽的分割线*******************************/
    
    // 不同类型的说明符可以混合使用
    unsigned long int num = 99;
    printf("num = %lu\n", num);
    
    signed short int num1 = 23;
    printf("num1 = %hi\n", num1);
    
    // 注意: 相同类型的说明符不能同时在一起使用
//    short long int num2 = 998;
//    unsigned signed  int num3 = 998;
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/jinxin70/article/details/83242921
今日推荐