C语言(一)--其他关键字

(关键字)sizeof:求数据类型字节数
sizeof.c

#include<stdio.h>
int mian()
{
    printf("int %d\n",sizeof(int));
    printf("short %d\n",sizeof(short));
    printf("long %d\n",sizeof(long));
    printf("double %d\n",sizeof(double));
    printf("float %d\n",sizeof(float));
    printf("char %d\n",sizeof(char));
    printf("int * %d\n",sizeof(int *));
    printf("char *",sizeof(char *));

    return 0;
}

运行结果:
这里写图片描述

(关键字)volatile:防止编译时被优化

(关键字)const:修饰只读变量
const.c

#include<stido.h>
int main()
{
    const int cc = 3//cc只读变量,只能说明,不能通过cc这个变量修改对应的内存空间的值

    int *p = (int *)&cc;    //但是可以通过指针修改
    *p = 1printf("%d\n",cc);
    return 0;
}

运行结果:

这里写图片描述

const就近原则
const int *p; 所指内容不能改变
int * const p; 地址不能改变
const int * const p; 都不能改变

(库函数)strlen:求字符串长度,遇到\0结束
strlen.c

#include<stdio.h>
#include<string.h>
int main()
{

    char a[1000];
    int i;
    for(i=0;i<1000;i++)
    {
        a[i]=-1-i;
        printf("%4d",a[i]);
    }
    printf("\nstrlen:%d\n",strlen(a));
    return 0;

}

运行结果:
这里写图片描述
分析:char占一个字节,8位,strlen遇到\0结束
符号位为1表示负数,其余全1表示-1,其余全0表示负数最大值
个人理解:-7-1=-8
-7的补码: 1001
-1的补码: 1111
相加结果:11000,前面越界舍去即1000是-8的补码
负数补码的算法:从左往右第一个1保持不变,其余依次取反

题目一:
int i = -20;
unsigned int j = 10;
i+j=?


int i = -20;
unsigned int j = 10;
if (i + j > 0)
    printf("big zero\n");
else
    printf("small zero\n");
printf("i+j=%d\n",i+j); \\以带符号的十进制形式输出整数
printf("i+j=%u\n",i+j): \\以无符号的十进制形式输出整数

运行结果:
这里写图片描述
分析:往表示大的转换,这里有符号转换为无符号
-20的补码: 1111 1111 1111 1111 1111 1111 1110 1100
10的源反补一致: 0000 0000 0000 0000 0000 0000 0000 1010
两数相加: 1111 1111 1111 1111 1111 1111 1111 0110
该数无符号的十进制为:4294967286

题目二:
unsigned int a = 3;
unsigned int j;
j = a *(-1);
j?


unsigned int a = 3;
unsigned int j;
j = a *(-1);
if(j>0)
    printf("big zero\n");
else
    ptintf("small zero\n");
printf("j=%d\n",j);
printf("j=%d\n",j);

运行结果:
这里写图片描述
分析:
-1的补码: 1111 1111 1111 1111 1111 1111 1111 1111
3的源反补一致:0000 0000 0000 0000 0000 0000 0000 0011
两数相乘:1111 1111 1111 1111 1111 1111 1111 1101
该数的无符号十进制表示:4294967293

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值