栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言数据类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言数据类型

数据类型

1.基本类型

字符型char
整型 short,int ,long ,unsigned
实型(单精度型float,双精度型double)
枚举类型enum

2.构造类型

数组类型 [ ]
结构体类型 struct
共用体类型 union

3.指针类型

*

4.空类型

void
整形类型
char;//1
short;//2
int;//4
long int;//4
long long;//8

unsigned char;//1
unsigned short;//2
unsigned int;//4
unsigned long int;//4
unsigned long long;//8

float;//4
double;//8
long double;//8,12,16

bool;//1

void;//不能定义变量,但可以定义指针
数据在内存中如何表示?

—数据在内存中的存储方式

以二进制存放,十六进制观察

int main()
{
    char ch = 'a';
    
    short sa = 0x1234;
    
    int ia = 0x12345678;
    
    return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JOXyjR4K-1633417742055)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004102733696.png)]

如何测试小端存放,还是大端存放

计算机存储整型数据是以补码存储的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W91inF9S-1633417742057)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004110750092.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdhdZurx-1633417742058)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004110916134.png)]

CPU只有一种运算—加法运算,通过补码的形式,把减法变为加法

char ,signed char 和 unsigned char

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Du9Ksuog-1633417742065)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004111706057.png)]

1000 0000— -128

int main()
{
    for(char a = 0;a<128;++a)
    {
        printf("%4d",a);//死循环
    }
    printf("n");
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMJNTrdG-1633417742071)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004112742880.png)]

int main()
{
    for(unsigned char a = 0;a<128;++a)
    {
        printf("%4d",a);
    }
    printf("n");
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSRFow2v-1633417742073)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004113010785.png)]

int main()
{
    for(unsigned char a = 0;a<256;++a)
    {
        printf("%4d",a);//死循环
    }
    printf("n");
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTEtiHdl-1633417742074)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004113122257.png)]

十六进制:0x0000 ~ 0xFFFF

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIq0Ndhh-1633417742075)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004113801739.png)]

整型数值的转换(扩充)
char, short, int, long int, long long 

表示范围小的整形变量赋值给表示范围大的整形变量的扩充方式:

1.有符号数,扩充符号位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FsmldDrv-1633417742078)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004114216567.png)]

2.无符号数,扩充0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VpWqUZGf-1633417742079)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004114348923.png)]

整型数值的转换(切片或截取)

从低地址开始切

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NrCmZtX7-1633417742080)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211004114808634.png)]

int main()
{
    int a = 300;
    //0000 0000 0000 0000 0000 0001 0010 1100
    char b = a;//0010 1100
    printf("%d n",b);//44
    return 0;
}
位运算
char a = 44;
char b = 0x57;
char c = 0;
c = a && b;//c = 1;

c = a & b;//位与 //按位相与
a => 0010 1100
b => 0101 0111
c => 0000 0100
    
c = a | b;//位或 //按位相或
a => 0010 1100
b => 0101 0111
c => 0111 1111
    
c = a ^ b;//异或 //相异为1,相同为0
a => 0010 1100
b => 0101 0111
c => 0111 1011
    
c = ~a;//位反
a => 0010 1100
c => 1101 0011 
    
a = 44;
a => 0010 1100
a = a>>1;//右移 /2
//有符号位,则写符号位;无符号位,则写0
a => 0001 0110
    
a = 44;
a => 0010 1100
a = a << 1;//左移 *2
//有符号位,则写符号位;无符号位,则写0
a => 0101 100

左移或者右移优先级比加法低

int Get1Bit(int x)
{
    int sum = 0;
    while(x)
    {
        if(x & 0x01)
        {
            sum += 1;
        }
        x = x >> 1;
    }
    return sum;
}
int main()
{
    int x = 0;
    scanf_s("%d",&x);//不能为负数,正数均可
    int sum = Get1Bit(x);
    printf("sum : %d n",sum);
    return 0;
}
int Get1Bit(int x)
{
    int sum = 0;
    while(x)
    {
        x = x & (x - 1);//每次消去一个1
        sum += 1;
    }
    return sum;
}
int main()
{
    int x = 0;
    scanf_s("%d",&x);//正负数均可
    int sum = Get1Bit(x);
    printf("sum : %d n",sum);
    return 0;
}

查表方式计算1的个数

思考题
int Get1Bit(int x)
{
    int sum = 0;
    for(int i = 0;i < sizeof(x)*2;++i)
    {
        sum += "112122312232334"[x & 0x0f];
        x = x >> 4;
    }
    return sum;
}
int main()
{
    int x;
    x = x^x;
    printf("%d ",x);//自身异或,为0
    return 0;
}
如何找到只出现一次的值—异或在面试中的应用,只有这一个

异或满足结合律,自身和自身异或为0

int main()
{
    int ar[] = {1,2,3,4,5,6,7,6,5,3,2,1};
    int n = sizeof(ar)/sizeof(ar[0]);
    int tmp = ar[0];
    for(int i = 1;i 
扫雷游戏—位运算 

如何把某一位设置为1,如何把某一位设置为0

如何对一个二进制位进行精确的定位

#define ROWSIZE 12
#define COLSIZE 12

#define MINESIZE 64
#define SHOWINIT 0x80 //@
#define MAKEMINE 0x40 
#define SHOWMINE 0x20 //#
#define MAKESUM  0x10
#define SHOWSUM  0x0F
#define CLEARINIT  0x7f //0111 1111
#define CLEARMINE  0xDF

typedef unsigned char MineType[ROWSIZE+2][COLSIZE+2];//九宫格

void Init_Ar(MinrType ar)
{
    for(int i = 1;i<=ROWSIZ;++i)
    {
        for(int j = 1;j <= COLSIZE;++j)
        {
            ar[i][j] = ar[i][j] | SHOWINIT;
        }
    }
    int i = 0;
    while(i ROWSIZE ||col <1 ||col > COLSIZE)
        {
            printf("row col inut error n");
            continue;
        }
        if(ch == '#')
        {
            ar[row][col] &= CLEARINIT;
            ar[row][col] |= H=SHOWMINE;
            if(ar[row][col] & MAKEMINE)
            {
                ++i;
            }
        }
        else if(ch == '0')
        {
            if(ar[row][col] &MAKEMINE )
            {
                printf("炸死");
                break;
            }
            ar[row][col] &= CLEARINIT;
        }
    }
}
作业

分段函数—用位运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkUvYE9J-1633417742082)(C:UsersLenovoAppDataRoamingTyporatypora-user-imagesimage-20211005150229624.png)]

如何对齐?

内存分配方案—内存对齐

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号