iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言整形提升举例详解
  • 477
分享到

C语言整形提升举例详解

c语言整型提升规则C语言整形c语言整形有哪些 2023-01-09 12:01:25 477人浏览 泡泡鱼
摘要

目录1.什么是整形提升2.为什么会有整形提升3.如何进行整形提升呢?4.整形提升的例子例1例2例3例4例5总结1.什么是整形提升 表达式中的字符和短整形操作数在使用之前被转换成普通整

1.什么是整形提升

表达式中的字符和短整形操作数在使用之前被转换成普通整形int,这种转换叫做整形提升

整形提升针对的类型小于整形的char,short

char占用1字节空间,short占用2字节空间,在运算时都会提升为占用4个字节的int类型

所以C的整型算术运算总是至少以缺省整型类型的精度来进行的。换而言之整形算术运算都至少以int类型计算的

2.为什么会有整形提升

表达式的整形运算要在CPU的相应运算器内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。

通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

因此,即使两个char类型的变量相加,在·CPU执行时实际上也要先转化为CPU内整型操作数的标准长速度。

3.如何进行整形提升呢?

整形提升是按照变量的数据类型的符号位来提升的

负数的整形提升:

char c1 = -1char类型占1字节,也就是它的二进制补码只有8个比特位 :1111111
因为char是有符号位的char,所以整形提升的时候,高位补符号位1
提升之后的效果为:11111111111111111111111111111111

正数的整形提升:

char c2 = 1;
变量c2的二进制位(补码)中只有8个比特位:
00000001
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为0
提升之后的结果是:
00000000000000000000000000000001

无符号的整形提升:高位补0

4.整形提升的例子

例1

#include<stdio.h>
int main()
{
	char a = 3;
	char b = 127;
	char c = a + b;
	printf("%d\n", c);
	return 0;
}

char a = 3,首先把3放到a中,3是int类型,3的二进制序列为:00000000000000000000000000000011
需要把3放到char中,int是32个比特位,char是8个比特位,所以接下来需要进行截断:将低8个比特位放到char中,所以此时a中为: 00000011

char b = 127也是一样
12700000000000000000000000001111111
截断为011111111

char c = a + b,接下来要进行整型提升
当前char为有符号的char,所以对于a就高位补0,为:00000000000000000000000000000011
同理,b整形提升后为:00000000000000000000000001111111

接下来相加为00000000000000000000000010000010,将这个32位二进制放到c中,截断为10000010

printf("%d\n", c)中,%d是打印十进制的数,所以还需整形提升,此时c10000010,符号位为:1,整形提升高位补1,最终为11111111111111111111111110000010(补码),其原码为10000000000000000000000001111110 ,所以这个数字输出为-126

输出结果:

例2

int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if(a==0xb6)
	printf("a");
if(b==0xb600)
	printf("b");
if(c==0xb6000000)
	printf("c");
return 0;
}

比较也是表达式,a,b也要发生整形提升,所以只有c不会整形提升,所以输为c

输出结果

这个例子能体现整形提升的存在

例3

int main()
{
char c = 1;
printf("%u\n", sizeof(c));
printf("%u\n", sizeof(+c));
printf("%u\n", sizeof(-c));
return 0;
}

cchar类型,sizeof(c)值为1
+c.-c中,c都参与计算,所以整形提升为int类型,sizeof(+c),sizeof(-c)值都为4

输出结果:

请添加图片描述

这个例子也能体现整形提升的存在

例4

下面程序输出什么?

#include <stdio.h>
int main()
{
  char a = -128;
  printf("%u\n",a);
  return 0;
}
  • 10000000000000000000000010000000 -128原码
  • 11111111111111111111111101111111 -128反码
  • 11111111111111111111111110000000 -128补码
  • 截断 10000000 a
  • 整形提升11111111111111111111111110000000
  • 所以最后输出11111111111111111111111110000000对应的十进制数,是一个很大的数

例5

下面程序输出什么?

#include <stdio.h>
int main()
{
  char a = 128;
  printf("%u\n",a);
  return 0;
}
  • 10000000000000000000000010000000 128补码
  • 截断:10000000 a补码
  • 整形提升:11111111111111111111111110000000
  • 所以最后输出11111111111111111111111110000000对应的数,一个很大的数

整形提升是真实存在的,但是我们平时感觉不到他的存在

其他操作符如int,floatdouble等大于等于int的操作符,之间的转换,就要用到算术转换了

总结

到此这篇关于C语言整形提升的文章就介绍到这了,更多相关C语言整形提升内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言整形提升举例详解

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

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

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

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

下载Word文档
猜你喜欢
  • C语言整形提升举例详解
    目录1.什么是整形提升2.为什么会有整形提升3.如何进行整形提升呢?4.整形提升的例子例1例2例3例4例5总结1.什么是整形提升 表达式中的字符和短整形操作数在使用之前被转换成普通整...
    99+
    2023-01-09
    c语言整型提升规则 C语言整形 c语言整形有哪些
  • C语言goto的应用举例以及详解
    目录一、goto语句的简单解释二、goto语句简单引用举例三、goto语句的实际引用场景总结一、goto语句的简单解释   goto语句其实就是一个跳转语句。C语言中提供了...
    99+
    2022-11-13
    c语言goto用法举例 c语言goto语句怎么用 C语言中的goto
  • C++语言举例分析
    这篇文章主要介绍“C++语言举例分析”,在日常操作中,相信很多人在C++语言举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++语言举例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!因为依赖开...
    99+
    2023-06-17
  • C语言的位段与枚举详解
    目录1.什么是位段? 2.位段的内存分配、跨平台与使用 3.什么是枚举? 4.枚举的优点与使用 总结1.什么是位段?  位段的声明和...
    99+
    2024-04-02
  • C语言算法举例分析
    这篇文章主要介绍“C语言算法举例分析”,在日常操作中,相信很多人在C语言算法举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言算法举例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!最近,我一...
    99+
    2023-06-17
  • C语言结构体,枚举,联合体详解
    目录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 用结构体声名变量2.4 用typedef 创建新类型...
    99+
    2024-04-02
  • C语言枚举与联合体深入详解
    目录前言枚举枚举的定义枚举的使用枚举的优点联合(共用体)联合体的定义联合体的特点联合体大小的计算总结前言 在C语言中,有三个自定义类型——结构体,枚举,联合,...
    99+
    2024-04-02
  • c语言中putchar的用法举例
    putchar() 函数用于向标准输出设备写入单个字符。其用法步骤如下:包含 头文件。定义一个表示要写入字符的整数变量。使用 putchar() 函数向控制台打印字...
    99+
    2024-05-02
    c语言
  • C语言数据类型枚举enum全面详解示例教程
    目录一、枚举类型的定义二、枚举类型的使用2.1创建变量2.2一些优点总结一、枚举类型的定义 enum Day//enum Day是一种类型 { Mon,//周一到周日这些叫枚举...
    99+
    2024-04-02
  • C语言举例讲解转义字符的使用
    目录前言啥是转义字符转义字符汇总表详解常见的转义字符总结前言 与大家一起理理转义字符。 啥是转义字符 简单理解:就是可以转换字符意思的字符。 转义字符汇总表 详解常见的转义字符 1...
    99+
    2024-04-02
  • c语言中fun函数用法举例
    c语言中fun函数是计算双曲正切的函数,用法为:传入要计算的弧度角x。返回该角度的双曲正切值。例如,计算角度1.23弧度的双曲正切值,返回1.32。 C语言中fun函数用法举例 fun...
    99+
    2024-05-10
    c语言
  • C语言简单题目举例分析
    本篇内容主要讲解“C语言简单题目举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言简单题目举例分析”吧!题目题目描述针对等额本金还款模式的客户,写一个程序按顺序输入贷款总额(单位为万元...
    99+
    2023-06-03
  • C语言举例讲解i++与++i之间的区别
    目录1.++i和i++的区别2.++i与i++哪个效率更高3.总结1.++i和i++的区别 众所周知的(也是学校教的),就是先自增再赋值还是先赋值再自增的区别。 #include&l...
    99+
    2024-04-02
  • C语言形参和实参的区别详解
    目录形参和实参的定义形参和实参的作用形参和实参的传递方式传值调用指针调用形参和实参的默认值总结C语言是一种高级编程语言,其最重要的特点之一是它允许程序员使用函数来组织代码。函数是一组...
    99+
    2023-05-20
    C语言 形参 实参
  • C语言常用库函数的使用及模拟实现详解例举
    目录1.strlen1.计数法2.递归法3.指针减指针2.strcpy3.strcmp4.strcat5.strstr6.strtok7.字符分类函数8.memcpy&mem...
    99+
    2024-04-02
  • C语言完整特性详情
    目录C# 10 完整特性介绍1、record struct2、sealed record ToString 方法3、struct 无参构造函数4、匿名对象的 with5、全局的 us...
    99+
    2024-04-02
  • C语言strtod()函数案例详解
    前言 网上有很多关于strtod()函数的文章,不过大部分都是用strtod()函数转换一个字符 char *str = "111.11"; char *target; doub...
    99+
    2024-04-02
  • C语言 sockaddr和sockaddr_in案例详解
    struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址。 一、sockaddr sockaddr在...
    99+
    2024-04-02
  • C语言 TerminateProcess函数案例详解
    TerminateProcess 顾名思义,就是终止进程的意思。 是WindowsAPI的函数, 示例代码如下: // Demo.cpp : 定义控制台应用程序的入口点。 //终...
    99+
    2024-04-02
  • C语言 bind()函数案例详解
    bind()函数介绍        在建立套接字文件描述符成功后,需要对套接字进行地址和端口的绑定,才能进行数据的接收和发送操作。 函数原型 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作