(补)简单记录下c语言学习的第三天

//关于“按位(2进制位)取反”符号——“~”的学习
//例如:
//int main()
//{
//    int a = 0;//0用2进制在内存中表示为:00000000000000000000000000000000
//    int b = ~a;//进行按位取反后,0变1,为:11111111111111111111111111111111
//    //b是一个有符号的整数,对于一个有符号的整数,其二进制的数的第一位是用于表示其符号的。
//    //其中,1表示这是负数,0表示这是正数。
//    //这里,又要新学到3个概念:分别是原码、反码、补码
//    // 原码与反码的关系是,符号不变,其他2进制按位取反。
//    // 反码与补码的关系是补码=反码+1
//    //而负数存储的是“2进制的补码”(把32个1作为2进制补码进行储存)
//    //以11111111111111111111111111111111为例,由于首位为1,是负数。
//    //此时11111111111111111111111111111111为2进制补码,
//    // 而printf打印用的,是这个数的二进制的原码。
//    //我们已知三码的转化过程为:原码—反码—补码
//    // 则进行逆向转化,11111111111111111111111111111111先减1
//    // 变为11111111111111111111111111111110(此时为反码)
//    // 反码转化后得到原码10000000000000000000000000000001
//    // 所以,此时打印出的结果自然为-1。
//    //
//
//    printf("%d\n",b);
//
//    return 0;
//}


//接下来,学习后置++,后置--
//int main()
//{
//    int a = 10;
//    int b = a++;//后置++,先使用(int b = a),然后执行再++ ,所以表示为int b = a++
//    printf("a=%d b=%d", a, b);//打印验证
//    return 0;
//}
//int main()
//{
//    int a = 10;
//    int b = ++a;//前置++,先执行++ ,后使用(int b = a)
//    printf("a=%d b=%d", a, b);//打印验证
//    return 0;
//}

//()————强制类型转换符
//int main()
//{
//    int a =(int) 3.14;
//    printf("%d\n", a);//将double类型3.14强制转化为int类型
//    return 0;
//}
// 
// 
// 
// 
//"!=",用于测试不相等
//"==",用于测试相等
// 
// 逻辑操作符
//"&&"----逻辑与//注意区别为&按位与
//int main()
//{
//    int a = 3;
//    int b = 7;
//    int c = a && b;//a为非0,b也为非0,在逻辑上,a真,b真,则a与b也为真。
//    printf("%d\n", c);//可知c为非0,又无给定值,默认输出为1
//    return 0;
//}

//"||"----逻辑或
//int main()
//{
//    int a = 7;
//    int b = 9;
//    int c = a || b;//逻辑上的或关系,一真都真,全假为假。
//    printf("%d", c);//显然输出值为1
//    return 0;
//}

//条件操作符的学习——常见的一个三目操作符
//格式:(exp1?exp2:exp3);
//先给出表达式1(exp1)的结果若为真,则表达式2要执行,表达式2的结果为整个表达式(exp1?exp2:exp3;)
//的结果。反之,表达式1结果为假,执行表达式3,且3结果为整个表达式结果。

//关键词:register
//计算机的数据储存结构为
//①寄存器
//②高速缓存
//③内存
//④硬盘
//从上到下,容量大小依次递增;但是访问速度依次递减
//为了提高代码运行与访问速度,可以通过register将常用的变量存入
//int main()
//{
//    register int a = 10;//将变量a存入寄存器中
//    return 0;
//}


//关键词:typedef——类型定义——类型重定义
//int main()
//{
//    //unsigned int a = 10;---unsigned 无符号整型,可知较为麻烦
//    typedef unsigned int u_int;//将unsigned int 简化为 u_int
//    u_int a = 10;//与unsigned int a = 10无区别
//    return 0;
//}


//接下来,分析一段代码
//void test()
//{
//    int a = 1;
//    a++;
//    printf("a=%d\n",a);
//}
//
//int main()
//{
//    int i = 0;
//    while (i < 5)
//    {
//        test();
//        i++;
//    }
//    return 0;
//}
//结果输出为
//a = 2
//a = 2
//a = 2
//a = 2
//a = 2
//分析其中的原因,首先,在未作特殊说明的情况下,所有局部变量均为auto变量(自动变量),在进入代码块中,
//自动生成,执行完毕,脱离代码块后,自动销毁。
//因此,每执行完一次test函数后,a被销毁,随后再次进入test函数,a又被生成,如此循环。
// 
//那么,有什么方法能挽救局部变量的生命,让他不要go die得那么快呢?
//可以使用 static修饰局部变量
//使得我们局部变量的生命周期变长。
//

//void test()
//{
//    static int a = 1;//将a变为一个静态的局部变量
//    a++;
//    printf("a=%d\n", a);
//}
//
//int main()
//{
//    int i = 0;
//    while (i < 5)
//    {
//        test();
//        i++;
//    }
//    return 0;
//}
//此时,输出的结果为:
//a = 2
//a = 3
//a = 4
//a = 5
//a = 6
//并且我们可以通过监视进程,了解到test函数执行后,变量a不销毁,且static int a = 1;会被跳过不执行。

that’s all.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值