iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言关键字sizeof、unsigned及signed怎么使用
  • 100
分享到

C语言关键字sizeof、unsigned及signed怎么使用

2023-07-02 09:07:44 100人浏览 安东尼
摘要

这篇文章主要介绍了C语言关键字sizeof、unsigned及signed怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言关键字sizeof、unsigned及signed怎么使用文章都会有所收获,

这篇文章主要介绍了C语言关键字sizeof、unsigned及signed怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言关键字sizeof、unsigned及signed怎么使用文章都会有所收获,下面我们一起来看看吧。

最冤枉的关键字sizeof理解

sizeof:确定一种类型在开辟空间的时候的大小。

被误解为函数

sizeof是关键字而不是函数,可以借助编译器来确定它的身份。

#include<stdio.h>int main(){int a = 10;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);printf("%d\n", sizeof int);//errorreturn 0;}

C语言关键字sizeof、unsigned及signed怎么使用

C语言关键字sizeof、unsigned及signed怎么使用

sizeof(a)可以去掉()说明sizeof不是函数,是关键字(操作符),因为函数后面的括号是不能省略的。

sizeof在计算变量所占的空间大小时,可以省略括号,而计算类型大小时,不能省略括号。

注:sizeof操作符里面不能有其他运算,否则达不到预期的结果。

sizeof(int)*p 表示什么意思

#include<stdio.h>int main(){int* p = NULL;int arr[10] = { 0 };int* parr[3];printf("%d\n", sizeof(p));//p是指针变量,指针变量的大小是固定的4或者8printf("%d\n", sizeof(*p));//指针变量所指的变量所占的内存的大小printf("%d\n", sizeof(arr));//sizeof(arr)中arr指整个数组,即10个int类型元素。printf("%d\n", sizeof(arr[10]));//数组越界printf("%d\n", sizeof(&arr));//&arr取得是整个数组的地址printf("%d\n", sizeof(&arr[0]));//取的是首元素的地址,相当于指针printf("%d\n", sizeof(parr));//parr指整个数组。return 0;}

C语言关键字sizeof、unsigned及signed怎么使用

C语言关键字sizeof、unsigned及signed怎么使用

指针变量p所指向的变量类型为char,指针数组parr中存储的指针变量的类型为char时候:

C语言关键字sizeof、unsigned及signed怎么使用

signed与unsigned 关键字

有符号整数vs无符号整数

char
 unsigned char//无符号的字符类型
 //取值范围是0~255
 //无符号表示二进制的最高位不表示正负,该整型只为正数。
 //但可以储存负数,只是值会变成很大的正数
 signed char//有符号字符
 //取值范围是-128~127
 //因为字符的本质是ASCII码值,在内存中以ASCII码值进行存储,所以划分到整型家族
short
 unsigned short [int]//无符号短整型
 signed short [int]//有符号短整型
int
 unsigned int//无符号整型
 signed int//有符号整型
long
 unsigned long [int]//无符号长整型
 signed long [int]//有符号整型
long long
 unsigned long long [int]//无符号更长的整型
 signed long long [int]  //有符号更长的整型

C语言关键字sizeof、unsigned及signed怎么使用

char到底是signed char (取值范围-128~127)还是unsigned char(取值范围0~255)

标准是为定义的,取决于编译器的实现,小沐所使用的VS2019环境的char是signed char。

char a;// signed char a 或者 unsigned char a

int 标准定义是 signed int ,有符号整型,4个字节,32个比特位

int a = 10;//signed int a//转换成二进制是00000000000000000000000000001010

整形在内存的存储

一个变量的创建是要在内存中开辟空间的,空间的大小是根据不同的类型而决定的。

那么,数据在所开辟内存中到底是如何存储的呢?

计算机存储数值时时存储的该数值的二进制的补码的,而补码是通过原码和反码进行换算得到的。

任何数据在计算机中,都必须转换成二进制,计算机只认识二进制。

原码

直接将数值按照正负数的形式翻译成二进制就可以得到原码。

反码

将原码的符号位不变,其他位依次按位取反就可以得到反码。

补码

反码+1就得到补码。

int a = 10;//00000000000000000000000000001010 a的原码//00000000000000000000000000001010 a的反码//00000000000000000000000000001010 a的补码//0x0000000aint b = -10;//10000000000000000000000000001010 b的原码//0x8000000a//11111111111111111111111111110101 b的反码//0xfffffff5//11111111111111111111111111110110 b的补码//0xfffffff6

符号位+数据位

有符号数且正数,原码,反码和补码相同。

有符号数且负数,原码,反码和补码不相同,需要通过计算转换。计算机内存储的整型必须是补码,符号位要参与计算的。

无符号数:没有符号位,原码,反码和补码相同。

int a = 20;

int b = -10;

我们知道,编译器为 a 分配四个字节的空间。那如何存储呢? 首先,对于有符号数,一定要能表示该数据是正数还是负数。所以我们一般用最高比特位来进行充当符号位。 原码、反码、补码 计算机中的有符号数有三种表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。 如果一个数据是负数,那么就要遵守下面规则进行转化: 原码:直接将二进制按照正负数的形式翻译成二进制就可以。 反码:将原码的符号位不变,其他位依次按位取反就可以得到了。 补码:反码+1就得到补码。 如果一个数据是正数,那么它的原反补都相同。

无符号数:不需要转化,也不需要符号位,原反补相同。

对于整形来说:数据存放内存中其实存放的是补码。

//字面值转补码

int a = 20;

//20是正整数

//0000 0000 0000 0000 0000 0000 0001 0100

int b = -10;

//-10是正整数

//1000 0000 0000 0000 0000 0000 0000 1010

//1111 1111 1111 1111 1111 1111 1111 0101

//1111 1111 1111 1111 1111 1111 1111 0110

补码转原码

方法一:先-1,在符号位不变,按位取反。

方法二:将原码到补码的过程在来一遍。

原反补转换需要通过计算机硬件来完成,

C语言关键字sizeof、unsigned及signed怎么使用

可以使用一条硬件电路就能完成原反补码的转换。

存储的本质
#include<stdio.h>int main(){unsigned int a = -10;//1000 0000 0000 0000 0000 0000 0000 1010--  -10的原码//1111 1111 1111 1111 1111 1111 1111 0110--  -10的补码printf("%d\n", a);printf("%u\n", a);return 0;}

C语言关键字sizeof、unsigned及signed怎么使用

无符号整型变量a定义时,先有空间,再有内容,先将内容转换成二进制。 整型再存储的时候,空间不关心内容的。

C语言关键字sizeof、unsigned及signed怎么使用

在将数据保存在空间内的时候,数据已经被转换成二进制的补码。

数据带上类型才有意义。类型觉得了如何解释空间内部保存的二进制序列。

变量的类型什么时候起效果?

在读取数据的过程中,变量的类型起效果。

//变量的存和取过程的结论:

//存:字面数据必须先转成补码,在放入空间当中。所以,所谓符号位,完全看数据本身是否携带&plusmn;号。和变量是否有符号

无关!

//取:取数据一定要先看变量本身类型,然后才决定要不要看最高符号位。如果不需要,直接二进制转成十进制。如果需要,则需要转成原码,然后才能识别。(当然,最高符号位在哪里,又要明确大小端)

十进制二进制快速转化

口诀:1后面跟n个0,就是2的n次方

67->64++1-->2^6+2^1+2^0
0000 0000 0000 0000 0000 0000 00100 0011
1->2^0
10->2^1
100->2^2
1000->2^3
后面跟n给比特位就是2^n
2^9->1000000000

为什么存储的是补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;

同时,加法和减法也可以统一处理(CPU只有加法器)。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

大小端

什么大端小端:

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

例如:

0x11223344

C语言关键字sizeof、unsigned及signed怎么使用

为什么有大端和小端:

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

关于“C语言关键字sizeof、unsigned及signed怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言关键字sizeof、unsigned及signed怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C语言关键字sizeof、unsigned及signed怎么使用

本文链接: https://www.lsjlt.com/news/340877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言关键字sizeof、unsigned及signed怎么使用
    这篇文章主要介绍了C语言关键字sizeof、unsigned及signed怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言关键字sizeof、unsigned及signed怎么使用文章都会有所收获,...
    99+
    2023-07-02
  • C语言详解关键字sizeof与unsigned及signed的用法
    目录最冤枉的关键字sizeof理解被误解为函数sizeof(int)*p 表示什么意思signed与unsigned 关键字有符号整数vs无符号整数整形在内存的存储原码反码补码存储的...
    99+
    2022-11-13
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2022-11-13
  • c语言include关键字怎么使用
    在C语言中,`include`关键字用于包含头文件。头文件是一种在源代码中声明函数、变量和宏等的文件,可以在多个源代码文件中重复使用...
    99+
    2023-09-26
    c语言
  • 怎么使用c语言中typedef关键字
    本篇内容主要讲解“怎么使用c语言中typedef关键字”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用c语言中typedef关键字”吧!typedef关键字可以为类型取一个新名字。按照惯例...
    99+
    2023-06-25
  • C语言关键字auto register怎么使用
    这篇文章主要介绍“C语言关键字auto register怎么使用”,在日常操作中,相信很多人在C语言关键字auto register怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C...
    99+
    2023-06-26
  • C语言常见关键字怎么使用
    这篇文章主要介绍“C语言常见关键字怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言常见关键字怎么使用”文章能帮助大家解决问题。1、关键字关键字是C语言提供的,不能自己创建关键字;关键字不...
    99+
    2023-07-02
  • c语言中关键字Static怎么用
    这篇文章将为大家详细讲解有关c语言中关键字Static怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、可执行程序内存分配1. 可执行程序程序分段一个程序的3个基本...
    99+
    2022-10-19
  • C语言中volatile关键字怎么用
    这篇文章主要介绍了C语言中volatile关键字怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.前言编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整...
    99+
    2023-06-20
  • C语言中的关键字怎么用
    本篇内容介绍了“C语言中的关键字怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.关键字变更历史1999年12月16日,ISO推出了C...
    99+
    2023-06-17
  • c语言sizeof函数怎么使用
    在C语言中,sizeof是一个用于获取数据类型或变量占用内存大小的运算符。它的使用方式有以下几种:1. 获取数据类型的大小:size...
    99+
    2023-08-31
    c语言 sizeof
  • C语言中的Static关键字怎么用
    这篇文章主要介绍C语言中的Static关键字怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、static关键字的基本含义首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存...
    99+
    2023-06-26
  • C语言中的Const关键字怎么用
    这篇“C语言中的Const关键字怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的Const关键字怎么用”文章吧...
    99+
    2023-06-29
  • C语言关键字const与volatile怎么用
    今天小编给大家分享一下C语言关键字const与volatile怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、con...
    99+
    2023-06-30
  • C语言关键字及变量怎么定义与声明
    这篇“C语言关键字及变量怎么定义与声明”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言关键字及变量怎么定义与声明”文章吧...
    99+
    2023-07-02
  • C语言的auto和register关键字怎么用
    这篇文章主要介绍“C语言的auto和register关键字怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言的auto和register关键字怎么用”文章能帮助大家解决问题。一、关键字分类C...
    99+
    2023-06-30
  • C语言中的strlen()和sizeof()怎么使用
    这篇文章主要介绍“C语言中的strlen()和sizeof()怎么使用”,在日常操作中,相信很多人在C语言中的strlen()和sizeof()怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中的...
    99+
    2023-07-05
  • C语言typedef关键字有什么作用
    本篇内容主要讲解“C语言typedef关键字有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言typedef关键字有什么作用”吧!1、来个笑话赵本山在春晚有一个这样的笑话,是这样的有...
    99+
    2023-06-03
  • C语言中volatile 关键字有什么用
    这期内容当中小编将会给大家带来有关C语言中volatile 关键字有什么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、关键字 volatile 是什么volatile是一个类型修饰符(type sp...
    99+
    2023-06-16
  • go语言的range关键字怎么使用
    这篇“go语言的range关键字怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的range关键字怎么使用”文...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作