欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 3.C语言 sizeof ,unsigned的使用方法

3.C语言 sizeof ,unsigned的使用方法

2024/12/21 23:36:23 来源:https://blog.csdn.net/qq_35427437/article/details/144495063  浏览:    关键词:3.C语言 sizeof ,unsigned的使用方法

目录

描述

sizeof 本质不是一个函数

unsigned无符号类型

unsigned与signed的区别

unsigned的使用场景

sizeof 返回类型

sizeof 的使用

案例1

案例2

总结


描述

1.sizeof 本质不是一个函数,只是一个操作符,跟+ - * / 一样

2. unsigned无符号类型

3.sizeof 返回类型

4.sizeof 的使用

sizeof 本质不是一个函数

int test1() 
{//对于数据类型 ,sizeof 必须要用 () 来使用printf("size of int: %d\n",sizeof(int));//对于变量是可以使用 () 或者去掉(),有两种选择double d = 3.14;printf("size of double: %d\n",sizeof d);printf("\n\n");
}

运行结果

对于数据类型,sizeof必须用()来使用,对于变量可以不用去掉(),可以看上面案例。

所以这个并不是一个函数,函数调用要求是一定要有()的。明显不是,只是一个操作符。

unsigned无符号类型

int test2() {unsigned int i = 10;if (i - 20 > 0) {printf("i 大于等于 0 \n");}else {printf("i 小于等于 0 \n");}printf("\n\n");
}

运行结果

我们可以看看打印结果

从上面结果来看如果不写无符号关键字,那么肯定是小于0的。

当unsigned int 和 int 类型数据做运算,编译器会将数据类型都转换的为unsigned int

在C语言中,unsigned是一个关键字,用于声明无符号类型的变量。unsigned修饰的整数类型只能表示非负值,而带符号的类型(即默认的int类型)可以表示正数、负数或零。使用unsigned声明的变量不能存储负数,其取值范围是从0到该类型能表示的最大正数。例如,一个32位的unsigned int变量的取值范围是0到4294967295。‌12

unsigned与signed的区别

  • 取值范围‌:unsigned类型的取值范围是有符号类型的两倍。例如,16位的signed short int的取值范围是-32768到32767,而unsigned short int的取值范围是0到65535。
  • 默认声明‌:在C语言中,默认声明的整型变量是有符号的(signed)。如果需要声明无符号类型,必须在类型前加上unsigned关键字。

unsigned的使用场景

  • 存储非负数‌:当你知道一个变量将只用于存储非负数时,使用unsigned可以充分利用变量的每一位,因为不需要为负数保留位。
  • 避免溢出‌:在某些情况下,使用unsigned可以避免因溢出而导致的错误。例如,在进行模运算时,使用unsigned可以确保结果始终为正数。\

unsigned int a = 10; // 声明一个无符号整型变量a,并初始化为10
signed int b = -10; // 声明一个有符号整型变量b,并初始化为-10

sizeof 返回类型

sizeof 返回类型是unsigned int 

我们可以验证一下:

int test2() {if (sizeof(int) - 5 > 0) {printf("i 大于等于 0  \n");}else {printf("i 小于等于 0  \n");}printf("\n\n");
}

运行结果:

以上结果是大于0的,unsigned如果减超出自己访问那么从最大开始减。

unsigned int 范围一般是  0~4294967295

我们可以看看运行代码

int test2() {unsigned int i = 10;i = i - 11;printf("i = %u\n\n",(i));printf("\n\n");
}

运行结果

sizeof 的使用

sizeof可以统计数组长度。

案例1

int test3() {int arr[] = { 1,2,3,4,5,6,7,8 };printf("arr len arr = %u\n\n", sizeof(arr));printf("\n\n");
}

运行结果

一共8个数据,每个数据是4个字节, 4*8 = 32

案例2

int arrayList(int arr[])
{printf("arr len arr = %u\n\n", sizeof(arr));
}
int test3() {int arr[] = { 1,2,3,4,5,6,7,8 };arrayList(arr);printf("\n\n");
}

运行结果

我们可以看到上面代码,通过一个函数传递,结果就变了。

当数组名作为函数参数的时候,会退化成一个指针,指向第一个元素。

总结

sizeof本质不是一个函数,而是一个操作符
        1.当统计类型占内存空间的时候,必须要加小括号
        2.当统计变量占内存空间的时候,可以不加小括号

sizeof的返回值类型是,无符号整型,unsigned int 

sizeof 可以统计数组的长度
        1.当数组名作为函数参数的时候,会退化成一个指针,指向第一个元素。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com