charshort的整形提升

news/2024/10/17 10:33:18/

目录

前言

整形提升的意义

整形提升的步骤

负数的整形提升

正数的整形提升

无符号整形提升

整形提升的例子


前言

        前面我们介绍了有关C语言中操作符的有关知识,当然操作符的作用就是要求相关表达式的值,当不同的数据类型相加减的时候,我们要进行一定的数据类型的转变。要怎么变化呢?经过之前各种大佬们想到了一种办法那就是表达式的整形提升。各位坐稳扶好,我们要开车了!!!

整形提升的意义

        表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

例如

char a, b, c;
{代码块}
a = b + c;

        上面这个代码执行的过程是:b和c的值被提升为普通整型,然后再执行加法运算,加法运算完成之后,结果将被截断,然后再存储于a中。

整形提升的步骤

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

负数的整形提升

        负数整形提升的时候,高位补充符号位,即为1
例如char c1 = -1;
变量c1的二进制位(补码)中只有8个比特位:
1111111
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为1
提升之后的结果是:
11111111111111111111111111111111

正数的整形提升

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


无符号整形提升

无符号整形提升,高位补0
 

整形提升的例子

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

        该例子中的,c只要参与表达式运算,就会发生整形提升

        表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字节.
        表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节

        但是 sizeof(c) ,就是1个字节.


http://www.ppmy.cn/news/589362.html

相关文章

tizen操作系统将支持android,三星Tizen操作系统将支持Android应用

在三星的计划中,Tizen不仅仅是一款手机操作系统,它还将被预装在上网本、智能电视以及车载系统上,而在推出搭载Tizen的智能手机后,三星还将上线Tizen的专属应用商店。 尽管三星和谷歌之间的合作非常成功,双方也就相关的…

三星借用计算机宽带上网,三星S6怎么通过USB共享电脑宽带上网?

您好: 以下方法供您参考: 电脑可以通过手机上网,前提手机自带调制解调器功能,一般网页往往都有几M,所以一定要GPRS包月,最好是不限流量的. 具体步骤(手机不同,设置大同小异) 1.电脑网络连接中,选择“创建一个新的连接”“下一步”&#xff0d…

三星智能机(android)用电脑网络上网

步骤 1 2 3 4 5 6 7 本题目从字面看有两种理解:一种是手机通过电脑上网;一种是电脑通过手机上网。同时由于三星手机品类繁多,这里以最主流的安卓系统手机为例进行讲解。 工具/原料 装有windows系统的笔记本电脑一台(推荐Win7系统…

国产山寨(苹果、三星等)上网本的修理记载

国产山寨(苹果、三星等)上网本的修理记载 在咸鱼上入手了一个山寨的国产笔记本。是那种凌动处理器16:10的刀锋卡卡本。买来时键盘是全坏的,没有硬盘、电池。笔者买了个预装XP的二手硬盘安上了,外接键盘用。亮机后屏幕默认是最亮的…

三星I5800上网设置

点击“应用程序” 选择“设定”----“无线及网络”-----(最好先关闭WI-FI设置)“移动网络” ------“接入点名称”----在点击手机左下方功能键后弹出“新APN”---填写如下信息 1.名称:cmwap 2.APN:cmwap 3.代理:10…

三星笔记本不能上网了(有网线)我所解决的一种方法

今天帮一个同事看一点问题,需要百度下,但是有两个笔记本却只有一根网线,没办法只能轮着用,结果是我用完后,再给他用,就没办法卡内了,插在我的电脑上是可以的,插在他的电脑上&#xf…

MYSQL使用事件调度器,每天动态生成一张数据库表

要在MySQL中实现每天动态生成一张表,你可以使用MySQL的事件调度器(Event Scheduler)功能。以下是实现这一目标的一般步骤: 检查MySQL的事件调度器是否已启用。可以在MySQL配置文件(通常是my.cnf)中&#x…

Go语言范围Range

1、Go语言范围Range Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数 组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。 for 循环的 range 格式可以对 slice、map、数组、字符…