C程序设计——类型转换

2024-08-29 05:20
文章标签 类型转换 程序设计

本文主要是介绍C程序设计——类型转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是类型转换

当两个不同类型的数据,进行算数运算时,就需要将两个数据转换成同一类型,再运算,这就叫类型转换。

注意,类型转换只是发生在计算过程中,并不更改变量或常量本身的类型。

隐式类型转换

经常写代码的同学都知道,进行算术运算时,运算符两边的数据类型,有时候会不一样,C编译器在处理的时候,会将两种类型转换为同一类型后,再进行计算。这种处理对程序员是透明的。

隐式类型转换的规则

隐式转换的前提是,参与运算的两个数,类型不同。

若参与运算的两个数中,有浮点数:

如果任何一个操作数是 double型,则在运算时,另一个操作数,也转换为double型,运算结果为 double ,

否则,如果任何一个操作数是 float 型,则在运算时,另一个操作数,也转换为float型,运算结果为float;

如果参与运算的,是两个不同类型的整数:

此时会将较短的类型,扩展为较长的类型,再进行计算,扩展算法为:

  1. 如果较短的类型是有符号的,则进行符号扩展;
  2. 如果较短的类型是无符号的,则高位补 0 。

显示类型转换

经常写代码的同学都知道,隐式类型转换,有时候转换的方法,不一定跟想象的一样,造成运算结果不符合预期。因此,C语言里定义了显示类型转换。显示类型转换的格式如下:

(类型名)(操作数);

这里的操作数,可以是变量,也可以是常量,先上代码:

int main(void)
{int iA = 1000 ;char cA = -1 ;unsigned char ucB= -1 ;printf("iA == %d, cA == %d, ucB == %d\r\n", iA, cA, ucB);// 将 cA 强制转化为 int型printf("iA + (int)cA == %d\r\n", iA + (int)cA);// 将 ucB 强制转化为 int型printf("iA + (int)ucB == %d\r\n", iA + (int)ucB);// 将 iA 强制转化为 char型printf("(char)iA + cA == %d\r\n", (char)iA + cA);// 将 iA 强制转化为 unsigned char型printf("(unsigned char)iA + ucB == %d\r\n", (unsigned char)iA + ucB);
}

运行结果如下: 

ucB 明明赋值为 -1 ,但是打印时却是 255,这个好解释,因为 -1 \equiv 255 \left ( mod256 \right ),所以无符号的时候 -1 就是255,有符号的时候 255 就是 -1,相信大家能理解,是吧。

(unsigned char)iA + ucB 的结果,看起来也很奇怪,明明是做加法,但是运算结果比 1000 小,比255 大,这个坑先留着,到后面再解释。

这篇关于C程序设计——类型转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

【oracle CLOB】ORACLE CLOB 类型转换为字符串

在ORACLE 中存储 大量 文本 超过了 3000个汉字 varchar 装不下 迫不得已使用了 : CLOB 类型 写sql 时如果字段是CLOB类型,必须转换为类型。 CLOB 类型转换为字符串: dbms_lob.substr(FILTER_TEXT,100000) select to_char(GMT_CREATE,'yyyy-mm-dd') as M1,dbms_lob.sub

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

C++隐式类型转换问题

问题描述:隐式类型转换问题 if (optimize_param.dynamic_lds_size > 64UL * 1024UL) 这里在64后面加上UL表示“usigned long“类型的常量,为了防止在计算或者比较过程中出现类型转换的问题。 举例说明隐式类型转换问题: #include <iostream>int main(int argc, char const *argv[]