整形提升

2024-08-23 23:36
文章标签 提升 整形

本文主要是介绍整形提升,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有任何不懂的问题可以评论区留言,能力范围内都会一一回答

整型提升 (Integral Promotion)是指在计算机编程中,当不同类型的整数类型进行运算时,较小类型的整数会被自动转换为更大类型的整数,以确保运算的正确进行。这种类型转换主要涉及 char 、 short 等小型整数类型和 int 类型。

整型提升的意义在于,CPU的运算器通常设计为以int类型的宽度进行数据操作,因此,为了确保运算的精度和效率,表达式中的char和short类型的操作数必须先转换为int类型,然后才能送入CPU进行处理。

整型提升的规则如下:

对于有符号的char和short类型,提升时在左端补得是最高位(符号位),正数补0,负数补1。
对于unsigned char和unsigned short类型,提升时在左端补0,结果总是正数。

整型提升是编程中的一个重要概念,它帮助确保各种整数类型之间的运算能够正确地进行,同时也提高了程序的兼容性和可移植性。

前言:
char 是一个字节8比特,
作为无符号范围是0到255
作为有符号的范围-128到127
所有编译器int 都默认是signed int 
但是char类型不同编译器是不同的,不过vs是signed char

根据以上内容

        我们直接来试一道题

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {char a = 130;char b = 120;printf("%d\n %d\n", b ,a+b);return 0;
}

这个题目的结果不120和250

因为 char 作为有符号的范围-128到127

vs是signed char(博主用的是vs)

那我们这个时候可以用整形提升来算这道题了

char是八位的,int是32
(这个数据使用时会被转换成int类型)
130 原码补码反码 1111 1111 1111 1111 1111 1111 1000 0010
120 原码补码反码 0000 0000 0000 0000 0000 0000 0111 1000
相加得           1111 1111 1111 1111 1111 1111 1111 1010
截断成char类型1111 1010(但是由于这个变量是char类型因此数据在存储时要被截断)
又因为打印是int类型(这个数据使用时会被转换成int类型)
故为这个是补码 1111 1111 1111 1111 1111 1111 1111 1010
        原码为 1000 0000 0000 0000 0000 0000 0000 0110
        也就是-6;

因此打印结果就是120和-6

这篇关于整形提升的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100818

相关文章

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

提升PrestaShop外贸电商网站安全的几款行业必备工具

提升PrestaShop外贸电商网站安全的几款行业必备工具 PrestaShop发展历程 PrestaShop是一款优秀且强大的外贸开源电商软件,我们开始使用PrestaShop始于2009年,那时PrestaShop还是0.9版本:界面清新,性能强悍,扩展友好等特性,既没有Magento的笨重,也没有ZenCart的古老,更没有OpenCart的脆弱,因此PrestaShop如雨后春笋,迅速

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

【JavaScript】let与var的区别及变量、函数提升

有var与无var的区别   在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口。 let与var的区别   在上面代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x就是if语句外创建的变量x。因此,在你修改if语句块内变量x的值的时候,也会修改函数中变量x的所有引用的