【整型提升问题】

news2024/9/22 3:34:08

整型提升是什么?

  • 整型提升的规则
  • 整型提升的存在

整型提升:

在计算机中,一个数据的类型如果是char 类型,以整型的形式打印该char类型的值时,会自动转换成整型,叫做整型提升。

整型提升的规则:

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

举例说明整型提升的存在:

int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d,b=%d,c=%d", a, b, c);
}

输出的结果是什么?

来一个个分析:
对于char a = -1;
先写出-1的原码反码和补码

10000000000000000000000000000001 - 原码
1111111111111111111111111111111111110 - 反码
1111111111111111111111111111111111111 - 补码

在内存中是以补码来运算的
把-1的补码放入a中,由于a是char类型,不足以存放-1,所以会发生截断,a是一个字节的大小,存放8个比特位,所以a中存放的是 11111111

打印的时候,是以%d的形式打印的,%d打印的是有符号的正数。故a会发生整型提升,提升到一个整型的大小。

根据整型提升的规则:

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

所以a提升的时候,是按照符号位的数值来提升的,a的符号位是1,提升的时候补全1。

所以a提升后的补码为11111111111111111111111111111111。提升后,打印结果出来,**而打印的时候是以原码来打印的。**故a需要转换成原码打印出来,%d认为,a提升后的第一位是符号位,所以变成原码时,符号位不变,其它位按位取反再+1,此时a提升后的原码为:10000000000000000000000000000001,转换成十进制的结果是 -1 .

对于b来说,signed char b = -1,与上面同理,-1的补码是 1111111111111111111111111111111111111 ,存入b中,b是signed char类型,不足以存放32比特位,只能存放8比特位,故b中存放的是 11111111 , 以%d的形式打印出来,同样进行整型提升,%d认为第一位是符号位,故b打印出来也是 -1。

而对于c,-1的补码表示出来,1111111111111111111111111111111111111 ,存入c中,由于c 是unsigned char 类型,故会发生截断,存入c的补码是 11111111,以%d的形式打印出来,由于c是无符号char类型,故第一位不是符号位,对于无符号类型来说,整型提升补0,故c整型提升后的结果为:00000000000000000000000011111111 - c整型提升后的补码。由于%d认为,第一位是符号位,符号位是0,故c整型提升后的补码是一个正数,正数的原码反码补码相同,故c整型提升后的补码也是原码。打印出来的结果是255。
在这里插入图片描述
结果如上:

总结:整型提升时,
对于有符号数来说,提升时补的是符号位上的那个数。
对于无符号数来说,提升时补的是0。

再来一道例题:

int main()
{
	char a = -128;
	printf("%u\n", a);
}

打印出来的结果是什么呢?

写出-128的原码反码补码:

10000000000000000000000010000000 - 原码
11111111111111111111111101111111 - 反码
11111111111111111111111110000000 - 补码

存入a中,a是char类型,会发生截断,故a是10000000
以%u的形式打印,%u打印的是无符号整数,故a会发生整型提升
a提升时,由于a是char类型,故提升补的是符号位上的数,补1
11111111111111111111111110000000 - a提升后的补码
%u打印无符号整数,故第一位不会被当成符号位。

对于无符号数来说,没有原码反码补码的概念,直接打印出来。
只有有符号数才有原码反码补码的概念

所以打印出来的结果是一个很大的数字,使用计算机来计算一下结果

在这里插入图片描述
打印结果如下:
刚好符合预期
在这里插入图片描述

总结:对于无符号数来说,没有原码反码补码的概念
对于有符号数来说,正数的原码反码补码相同
负数的反码等于原码的符号位不变,其它位取反,补码等于反码+1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 力扣 2042. 检查句子中的数字是否递增 areNumbersAscending

大家觉得写还可以,可以点赞、收藏、关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录2042. 检查句子中的数字是否递增题目描述示例 1:示例…

分享一套微信门户应用管理系统源码 微信公众号平台开发框架源码

微信门户开发框架源码 微信公众号平台开发框架源码 源码分享,需要源码学习可私信我获取。 微信门户应用管理系统,采用基于 MVC Bootstrap Ajax Enterprise Library的技术路线,界面层采用Boostrap Metronic组合的前端框架,数…

新浪l2接口委托撤单是如何用c++实现的?

今天要和大家分享的是新浪l2接口委托撤单,那么接下来小编分享的是它的C实现代码! // 委托撤单 // exchangeId: 0>深证(东兴证券是A0, 招商证券普通账户是2) // 1>上证 typedef void (*CancelOrderProc)(int clientId, const char …

录屏怎么录,试试这三个电脑录屏方法

录屏是当前最常用的功能,它可以帮助我们将喜爱的视频片段、线上会议,网络课程以及不能被下载的视频都给录制下来。电脑录屏怎么录?我们可以用电脑自带的录屏工具,或者使用第三方专业的电脑录屏软件来录制。下面小编就给大家分享3个…

2023年机器人与人工智能国际会议(JCRAI 2023)

2023年机器人与人工智能国际会议(JCRAI 2023) 重要信息 会议网址:www.jcrai.org 会议时间:2023年7月7-9日 召开地点:中国上海 截稿时间:2023年5月20日 录用通知:投稿后2周内 收录检索&am…

异常机制与体系

目录 一、传统的错误处理机制 二、异常概念 三、异常的使用 3.1 抛出与捕获 3.1.1 异常的抛出和匹配原则 3.1.2 在函数调用链中异常栈展开匹配原则 3.2 重新抛出 3.3 异常安全 3.4 异常规范 四、自定义异常体系 五、标准库的异常体系 六、异常的优缺点 6.1 优点 …

第三十三讲:神州三层交换机远程管理

1、三层交换机带外管理: CS6200-28X-EI>ena CS6200-28X-EI#conf CS6200-28X-EI(config)#username dcn privilege 15 password 0 123456 CS6200-28X-EI(config)#enable password 789 CS6200-28X-EI(config)#authentication line console login local CS6200…

Java多线程join()方法

Java多线程join()方法 一、概述 1、join():等待这个线程死亡&#xff0c;相当于join(0)。 2、join(int n) &#xff1a;最多等待n毫秒之后在处理 -2.1、join的时间 < sleep的时间&#xff0c;那么sleep就会停止&#xff0c;运行时间就是join的时间 -2.2、join的时间 > …

vue 2.x+webpack+cesium1.64详解(7):cesium事件详解

目录 cesium事件详解 一、屏幕空间事件处理程序&#xff08;Screen Space Event Handler&#xff09; 1.1、 屏幕空间事件类型&#xff1a;&#xff08;ScreenSpaceEventType&#xff09;鼠标事件 2.1、键盘修饰符类型&#xff08;KeyboardEventModifier&#xff09; 二、屏…

黑马Hive+Spark离线数仓工业项目-服务器性能监控Prometheus

监控需求及常见工具 目标&#xff1a;了解服务器性能监控需求及常见监控工具 路径 - step1&#xff1a;监控需求 - step2&#xff1a;常见工具 实施 监控需求 - 问题&#xff1a;数据量越来越大&#xff0c;机器数量越来越多&#xff0c;如何保证所有服务器稳定的的运行&a…

【EHub_tx1_tx2_E100】 ROS_ Melodic + Astra S(如何在该环境下打开摄像机获取rgb/深度图/点云)

简介&#xff1a;介绍奥比中光 Astra S 深度相机 在EHub_tx1_tx2_E100载板&#xff0c;TX1核心模块环境&#xff08;Ubuntu18.04&#xff09;下测试ROS驱动&#xff0c;打开摄像头RGB图像和查看深度图和点云图&#xff0c;本文的前提条件是你的TX1里已经安装了ROS版本&#xff…

CAN 通信协议

CAN 概述 CAN 是Controller Area Network 的缩写&#xff08;以下称为CAN&#xff09;&#xff0c;它的设计目标是以最小的CPU负荷来高效处理大量的报文。1986 年德国电气商BOSCH公司开发出面向汽车的CAN 通信协议。此后&#xff0c;CAN 通过ISO11898 及ISO11519 进行了标准化…

Vue 实现拖拽模块(五) - 下 预览元件

上文介绍了 定义元件的触发事件(上) 的简单实现 本文主要介绍了预览元件数据&#xff0c;并根据配置事件去触发逻辑&#xff0c;具体如下&#xff1a; 效果图 实现过程 创建预览页面 (元件配置和预览并不是同一个页面)预览页面使用 localStorage 缓存获取保存的元件数据&…

网络编程看这一篇文章就够了

第一章 网络编程概述 网络编程概述1 2 3Java语言提供了网络的支持,程序员能够很容易的开发常见的网络应用.Java提供的类库,可以实现无痛的网络连接,联网的底层细节被隐藏在安装Java本机系统里.由JVM进行控制.并且Java实现了一个跨平台的网络库.网络编程的目的1直接或间接地通过…

SQL Server注入技巧与提权方式详解

目录 前言 一、SQL Server基础 1. SQL Server 2012安装启动 navicat远程连接 2. SQL Server概念 数据库的组成 数据库中常用对象 默认库介绍 3. T-SQL语言 创建数据库 创建表 插入数据 基础语法总结 4. sqlserver权限 新建用户并赋予权限 权限总结 二、Sqlser…

4.1 集成运算放大电路概述

集成电路以半导体单晶硅为芯片&#xff0c;采用专门的制造工艺&#xff0c;把晶体管、场效应管、二极管、电阻和电容等元件及它们之间的连线所组成的完整电路制作在一起&#xff0c;使之具有特定的功能。集成放大电路最初多用于各种模拟信号的运算&#xff08;如比例、求和、求…

RabbitMQ 管理界面操作说明

RabbitMQ 管理界面操作说明 当我们安装好RabbitMQ&#xff0c;并开启了rabbitmq_management插件并重启RabbitMQ服务后,我们就可以访问管控台了。 #启动后台管理 [rootVM-0-9-centos sbin]#rabbitmq-plugins enable rabbitmq_management rabbitmq_management开启后&#xff0…

Java流程控制语句-学习笔记

目录 第一章 流程控制语句 1.1 流程控制语句分类 1.2 顺序结构 第二章 判断语句&#xff1a;if语句 2.1 if语句格式1 2.2 if语句格式2 2.3 if语句格式3 第三章 switch语句 3.1 格式 3.2 执行流程&#xff1a; 3.3 switch的扩展知识&#xff1a; 第四章 循环结构 4…

win11+wsl2+kind安装k8s

win11wsl2安装k8s 1. 安装docker w11上面安装docker-desktop的方案&#xff0c;具体的安装步骤&#xff1a; 先开启系统的镜像支持更新wsl设置默认版本为2安装docker-desktop&#xff0c;修改安装位置等&#xff0c;否则就是安装在c盘中 https://blog.csdn.net/weixin_4391…

【机器学习】李宏毅-判断年收入

李宏毅-判断年收入1 实验目的 本次作业的数据是加州大学尔湾分校机器学习作业中下载得到&#xff0c;使用Classification中的生成模型generative model以及logistic regression解决二分类问题。 根据已有数据&#xff0c;判断该人年收入是否大于5万美元&#xff0c;最终得到预…