int转换为char
- 格式:doc
- 大小:12.50 KB
- 文档页数:1
C学习笔记:char与int互转学了这么久,总结出4种int与char互相转换的⽅法:
1.ASCII法
推荐度:5星★★★★★
这是通⽤性最强的⽅法,也⽐较简单。
缺点是只能⼀个⼀个转换
代码:
char cNum='5',result1;
int iNum=5,result2;
//char to num
result2=cNum-48;
//num to char
result1=iNum+48;
总之,int到char就是+48
char到int就是-48
2.函数法
推荐度:3星★★★
使⽤itoa、atoi(都在stdlib.h头⽂件)函数转换
操作简单,能⼀次性转换(不是⼀位⼀位的),不过有个很⼤的问题:itoa函数并⾮标准C的实现,只能在windows下编译通过,换句话说,如果你是写软件,没问题。
但如果你是搞信息奥赛,那么这个函数不⼀定能通过编译。
具体的使⽤⽅法,请百度。
3.sprint法
推荐度:2星★★
此⽅法只能做到int转char。
不过配合atoi,也能达到⽬的。
是标准的C函数
代码:
int num=1234567;
sprintf(str, "%d", num);
//此时str就是“1234567”了。
注意,str是个char数组
4.枚举判断法
推荐度:0星
额……就是if(a=’1′)b=1这样的……
都学了OI了,不⾄于还这么搞吧?。
int转换char的正确姿势⼀:背景在⼀个项⽬中,我需要修改⼀个全部由数字(0~9)组成的字符串的特定位置的特定数字,我采⽤的⽅式是先将字符串转换成字符数组,然后利⽤数组的位置来修改对应位置的值。
代码开发完成之后,发现有乱码出现([]),经过排查发现,我将数字(0~9)转换成字符的姿势不对,现记下⼀笔,以加深印象。
⼆:错误的使⽤⽅式如下代码所⽰,直接将int类型的数字直接转换成了char类型的数据,就会出现如(图-1)所⽰的情况public class TestChar {public static void main(String []args){for(int i =0,sum=9; i<sum; i++){char c = (char)i;System.out.print("the int value is : "+i+" the convert char value is : ");System.out.println(c);}}}图-1三:正确的使⽤⽅式后来发现字符类提供了对应的转换⽅法,如下代码所⽰,执⾏效果,如(图-2)所⽰public class TestChar {public static void main(String []args){for(int i =0,sum=9; i<=sum; i++){char c = Character.forDigit(i,10);System.out.print("the int value is : "+i+" the convert char value is : ");System.out.println(c);}}}当然了,如果,我们的前提条件是,只是将(0~9)这是⼗个int类型的数字转为其对应的字符表⽰形式的话,除了使⽤字符类提供的⽅法也有别选择,⽐如,下⾯的简单处理⽅式⽅式2:int->String-charpublic class TestChar {public static void main(String []args){for(int i =0,sum=9; i<=sum; i++){char c = String.valueOf(i).charAt(0);System.out.print("the int value is : "+i+" the convert char value is : ");System.out.println(c);}}}⽅式3:直接通过字符数字表现形式所对应的数字来转换public class TestChar {public static void main(String []args){for(int i =0,sum=9; i<=sum; i++){char c = (char)('0' + i);System.out.print("the int value is : "+i+" the convert char value is : ");System.out.println(c);}}}⽅式4:和⽅式3⼀样的道理public class TestChar {public static void main(String []args){for(int i =0,sum=9; i<=sum; i++){char c = (char)(48+ i);System.out.print("the int value is : "+i+" the convert char value is : ");System.out.println(c);}}}四:问题使⽤int直接转换为char的⽅式为什么不对哪?嗯,要回答这个问题需要弄明⽩char的本质了char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).char这种简单的java数据类型特点如下:1:是java语⾔中8种基本数据类型中的⼀种2:它占两个字节⼗六位3:最⼩值是0,最⼤值是655354:它可以通过单引号包装起来表⽰,⽐如:‘1’、‘A’、‘中’,也可以使⽤0~65535⼗进制(其他进制的数也可以)的整数表⽰,也可以使⽤‘\u0000’~'\uffff'表⽰5:它的默认值是'\u0000'(或者0)6:只能是单个字符,多了,没有都不⾏(空格也是⼀种字符)当使⽤int类型的数据强转为char类型数据的时候,由于int数据类型是占四个字节的数据,(当int的值不在char类型的范围的时候会失去⼀定位数)此时char类型的数据值是int类型的值所对应的Unicode编码表中所对应的字符。
c语言大值int强转char规则【原创实用版】目录1.C 语言中的数据类型2.整型(int)和字符型(char)的转换规则3.int 强转 char 的方法4.实际应用中的注意点正文一、C 语言中的数据类型C 语言中,数据类型可以分为基本数据类型和复合数据类型两大类。
基本数据类型包括整型、浮点型、字符型等,而复合数据类型包括数组、结构体、联合体等。
其中,整型和字符型是最常用的数据类型之一。
二、整型(int)和字符型(char)的转换规则在 C 语言中,整型和字符型之间的转换可以通过类型强制转换来实现。
具体来说,可以将整型数据强制转换为字符型数据,也可以将字符型数据强制转换为整型数据。
int 转 char 的方法如下:```cint num = 100;char ch = (char)num;```ch 中存储的值为字符"D",因为整型数据 100 在 ASCII 码表中对应的字符是"D",其 ASCII 码值为 100。
char 转 int 的方法如下:```cchar ch = "A";int num = (int)ch;```um 中存储的值为字符"A"的 ASCII 码值,即 65。
三、int 强转 char 的方法int 强转 char 的方法与 int 转 char 的方法类似,也可以通过类型强制转换来实现。
不过,由于 int 类型的数据范围较大,而 char 类型的数据范围较小,因此在进行 int 强转 char 时,需要确保 int 类型的数据在 char 类型的数据范围内,否则会丢失数据。
例如:```cint num = 2147483648;char ch = (char)num; // ch 中存储的值为字符"?"```由于字符"?"的 ASCII 码值为 63,而 2147483648 大于 63,因此ch 中存储的值为字符"?",即 ASCII 码值为 63 的字符。
在 C 语言中,将整数类型int转换为字符类型char通常需要注意一些规则,因为char类型是一个整数类型,但它通常被用于表示字符。
以下是将int转换为char 的一些规则和注意事项:1.显式类型转换:在 C 语言中,可以使用显式的类型转换将int转换为char。
这可以通过将整数值直接赋值给char变量,但需要使用括号将目标类型括起来。
int num =65;// 整数值char ch =(char) num;// 显式转换为 charprintf("%c\n", ch);// 输出:A2.注意值的范围:char类型通常被用来表示单个字符,它的取值范围是 -128 到 127 或 0 到255,具体取决于系统的字符编码。
如果整数值超出了char的取值范围,将会发生截断,只保留低位的字节。
int num =300;// 超出 char 的范围char ch =(char) num;printf("%d\n", ch);// 输出:44 (300 % 256 = 44)3.注意符号:如果整数值是负数,将会按照补码表示法进行转换。
负数的补码会变成相应正数的补码,然后再按位取反加一。
结果可能不是预期的字符。
int num =-65;// 负整数值char ch =(char) num;printf("%c\n", ch);// 输出:遗留值(取决于系统的字符编码)4.字符编码:char类型在 C 中通常用来表示 ASCII 码或其他字符编码的值。
例如,'A'对应的 ASCII 码是 65,因此将int值 65 转换为char会得到字符'A'。
int num =65;char ch =(char) num;printf("%c\n", ch);// 输出:A总之,将int转换为char需要考虑取值范围、符号以及字符编码等因素。
c语言大值int强转char规则摘要:一、C 语言中整数类型与字符类型简介1.整数类型2.字符类型二、大值int 强转char 规则1.定义大值int2.强转char 的过程3.注意事项三、实际应用与举例1.实际编程场景2.举例说明正文:一、C 语言中整数类型与字符类型简介C 语言中,整数类型包括short、int、long 和long long,分别表示短整型、整型、长整型和超长整型。
字符类型则包括char,它占用一个字节的空间。
在C 语言中,整数类型可以隐式转换为字符类型,但需要注意数据精度的损失。
二、大值int 强转char 规则1.定义大值int大值int 是指整数类型中占用空间较大的类型,如long long。
在C 语言中,大值int 通常用于表示较大的整数值。
2.强转char 的过程当需要将大值int 类型转换为char 类型时,需要先将大值int 类型转换为int 类型,再将int 类型转换为char 类型。
这个过程通常称为“强转”,目的是为了确保数据的精度不受到损失。
3.注意事项在进行大值int 强转char 时,需要注意数据溢出的问题。
当大值int 的值超出了char 类型的表示范围时,转换结果可能不正确。
三、实际应用与举例1.实际编程场景在实际编程中,我们可能需要将大值int 类型的数据转换为字符类型的数据,以便进行字符串拼接、格式化输出等操作。
此时,了解大值int 强转char 的规则就显得尤为重要。
2.举例说明假设我们有一个大值int 类型的变量a,其值为123456789012345,现在需要将其转换为char 类型的字符串表示。
int类型与char类型的转换---------siwuxie095Java对char类型的数据在底层是按int类型来处理的(只是显⽰出来仍然是字符型)1、int类型与char类型在赋值时⾃动转换如:package com.siwuxie095.test;public class Test12 {public static void main(String[] args) {//65 直接赋值给字符变量 c 输出时显⽰65对应的字符:Achar c=65;//将字符B 存储在整型变量 i 中实际存储的是 B 对应的Unicode码:66//Unicode码包含 ASCII码int i='B';System.out.println(c+":"+i);}}Eclipse中:运⾏⼀览:2、字符类型的数据可进⾏数值计算如:package com.siwuxie095.test;public class Test13 {public static void main(String[] args) {char c='A';//字符变量 c 可以和整型相加,且结果可正常赋值给整型变量 iint i=c+1;//如果直接 c=c+1; 会报错因为变量 c 与字⾯量 1相加的结果是int类型//int类型向⼩类型char类型转换需要强转c=(char) (c+1);System.out.println(c+":"+i);}}Eclipse中:运⾏⼀览:【made by siwuxie095】。
详解C语⾔中的char数据类型及其与int类型的转换C语⾔中的char变量char是C/C++整型数据中⽐较古怪的⼀个,其它的如int/long/short等不指定signed/unsigned时都默认是signed。
虽然char在标准中是unsigned(因为char类型提出的初衷是⽤来表⽰ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器。
可通过下⾯程序判断编译器的默认char类型:void char_type(){char c=0xFF;if(c==-1)printf("signed");elseif(c==255)printf("unsigned");elseprintf("error!");}当你不确定编译器的默认char类型时,就⽤显⽰声明:signed char和unsigned char;在C/C++语⾔中,char变量为⼀个字节,8位,signed char表⽰的范围:-128~127【-128在内存中的⼆进制表⽰为1000 0000,127在内存中的表⽰为0111 1111】;unsign char表⽰的范围:0000 0000~1111 1111,即0~255;注意:整数在内存中是以补码存取的,正数的补码:等于⾃⼰,负数的补码:取反加1,例如:127在内存中表⽰为0111 1111, -127在内存中表⽰为~(0111 1111)+1=1000 0001;假定某内存单元p的内容是1111 1111,那么它⼀定是255吗?实际上取决于你的代码是要把它看成有符号还是⽆符号数,如果是⽆符号则表⽰255,如果是有符号则表⽰-1【对于有符号数,最⾼位为符号位,1表⽰负,0表⽰正】:signed char c=*p; //c=-1unsigned char c=*p;//c=255这也解释了上⾯这段代码能判断编译器默认char类型。
C++int与char[]的相互转换⼀、itoa函数与atio函数①把int类型数字转成char类型,可以使⽤itoa函数。
itoa函数原型:char*itoa(int value,char*string,int radix);int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。
功能:将任意类型的数字转换为字符串。
②在<stdlib.h>中与之有相反功能的函数是atoi。
example:#include<stdio.h>#include<stdlib.h>#include<iostream>#using namespace std;void main(){ char str[10]="121"; int num=atoi(str); cout<<num<<endl; char str2[10]={0}; itoa(num,str2,10); cout<<str2<<endl;}⼆、sprintf函数sprintf函数可⽤于格式化数字字符串:在这点上sprintf和printf的⽤法⼀样,只是打印到的位置不同⽽已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以⽤来将整型转化为字符串,⽐itoa效率⾼且如此地简便~⽐如:sprintf(buffer, "%d", 2131);即把整型变量拼接到buffer当中。
单片机中数据类型的强制转换
在单片机中,数据类型的强制转换是指将一种数据类型转换为另一种数据类型。
常见的数据类型强制转换包括以下几种:
1. 显式强制转换:通过强制转换运算符来实现,将一种数据类型转换为另一种数据类型。
例如:(int)num 将num转换为int
类型。
2. 隐式强制转换:是指编译器自动进行的类型转换,不需要显示地使用强制转换运算符。
例如,将一个char类型数据赋值
给一个int类型变量,编译器会自动将char类型转换为int类型。
3. 整数提升:在一些运算中,如果参与运算的两个数的数据类型不一致,编译器会将较低精度的数据类型提升为较高精度的数据类型。
例如,将一个char类型和一个int类型进行运算时,编译器会将char类型提升为int类型。
4. 类型截断:当将一个较高精度的数据类型赋值给一个较低精度的数据类型时,编译器会自动进行类型截断,只保留赋值变量能表示的范围内的值。
例如,将一个int类型赋值给一个
char类型的变量,编译器会将int类型的值截断为char类型能
表示的范围。
需要注意的是,数据类型的强制转换可能导致数据的丢失或截断,因此在进行数据类型强制转换时,需要谨慎考虑数据精度的问题,避免数据错误或产生意外结果。
有关C++问题怎么把int型1转换为char型1?你的问题可以有两个理解:理解一、你是想把int型的变量强制转换为char型的变量吗?很简单在变量前加强制转换运算符就可以了。
例程:int a=1;char c=(char)a; //把a强制转换为char型赋给变量c理解二、你是想把1转换为字符‘1’吧?在ASCII编码表中,字符‘0’~‘9’是顺序编码的,所以用相应的值加上字符‘0’的编码,就是那个值的ASCII码了。
例程:int a=1;char c=a+'0'; //c的值就是'1'的ASCII码值atoi(将字符串转换成整型数)相关函数atof,atol,atrtod,strtol,strtoul表头文件#include<stdlib.h>定义函数int atoi(const char *nptr);函数说明atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
返回值返回转换后的整型数。
附加说明atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。
范例/* 将字符串a 与字符串b转换成数字后相加*/#include<stdlib.h>mian(){char a[]=”-100”;char b[]=”456”;int c;c=atoi(a)+atoi(b);printf(c=%d ”,c);}执行c=356C++ 中int,char,string,CString类型转换(一)1. c++中string到int的转换1) 在C标准库里面,使用atoi:#include <cstdlib>#include <string>std::string text = "152";int number = std::atoi( text.c_str() );if (errno == ERANGE) //可能是std::errno{//number可能由于过大或过小而不能完全存储}else if (errno == ????)//可能是EINVAL{//不能转换成一个数字}2) 在C++标准库里面,使用stringstream:(stringstream 可以用于各种数据类型之间的转换)#include <sstream>#include <string>std::string text = "152";int number;std::stringstream ss;ss << text;//可以是其他数据类型ss >> number; //string -> intif (! ss.good()){//错误发生}ss << number;// int->stringstring str = ss.str();if (! ss.good()){//错误发生}3) 在Boost库里面,使用lexical_cast:#include <boost/lexical_cast.hpp>#include <string>try{std::string text = "152";int number = boost::lexical_cast< int >( text );}catch( const boost::bad_lexical_cast & ){//转换失败}2.string 转CStringCString.format(”%s”, string.c_str());用c_str()确实比data()要好;3.char 转CStringCString.format(”%s”, char*);4.char 转stringstring s(char *);只能初始化,在不是初始化的地方最好还是用assign().5.string 转char *char *p = string.c_str();6.CString 转stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.7.字符串的内容转换为字符数组和C—string(1) data(),返回没有”\0“的字符串数组(2) c_str(),返回有”\0“的字符串数组(3) copy()8.CString与int、char*、char[100]之间的转换(1) CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。
c语言int转ascii码的函数概述说明1. 引言1.1 概述C语言是一种广泛应用的编程语言,其灵活性和效率使其成为许多开发者的首选。
在C语言中,我们经常需要操作字符和字符串,并进行字符编码转换。
本文将重点探讨如何将int类型转换为ASCII码(American Standard Code for Information Interchange)。
1.2 文章结构本文共分为五个部分,分别是引言、正文、方法说明、示例代码以及结论与总结。
在引言部分,我们将简要介绍文章背景和结构,并明确本文的目的。
正文部分将详细讲解C语言中int和ASCII码之间的关系,以及两种不同方式实现int转ASCII码的方法。
接下来,在方法说明部分,我们将逐步解释这两种转换方式的具体步骤。
然后,在示例代码部分,我们将提供使用这两种方式进行int到ASCII 码转换的具体示例代码。
最后,在结论与总结部分中,我们将对比并分析这两种方法的优缺点,并给出总结和建议。
1.3 目的本文旨在帮助读者理解C语言中int类型与ASCII码之间的关系,并提供了两种常用方法实现int到ASCII码转换。
通过阅读本文,读者可以深入了解这些转换方法,并根据自己的需要选择适合的方式。
希望本文对学习和应用C语言的开发者们有所帮助。
2. 正文:2.1 C语言中int和ASCII码的关系在C语言中,每一个字符都有对应的ASCII码值。
ASCII码是一种字符编码标准,使用一个字节(8位)来表示一个字符。
其中,0到127之间的ASCII码对应着常见的英文字母、数字、标点符号以及部分控制字符。
而在C语言中,整数类型int也占用4个字节(32位)。
因此,在将int类型数据转换为ASCII码时,可以利用这种关系进行相应的转换操作。
2.2 int转ASCII码的方式一一种常见的将int类型数据转换为对应的ASCII码值的方式是通过强制类型转换实现。
通过将int类型变量赋值给char类型变量,并且直接打印该char类型变量的取值,即可得到该int型数字对应的ASCII码。
int转char的函数题:int转char的函数导语:在编程中,经常需要将整数转换为字符。
在C语言中,可以通过使用int转char 的函数来实现这个转换过程。
这篇文章将一步一步地向您介绍如何编写一个int 转char的函数,并提供示例代码。
第一步:了解ASCII码表在进行字符转换之前,我们需要先了解ASCII码表。
ASCII码表是一种将字符映射为整数的标准编码系统。
在ASCII码表中,每个字符都与一个整数对应。
例如,字母'A'对应的整数值为65,字母'a'对应的整数值为97。
了解ASCII码表将帮助我们在进行字符转换时正确地处理整数值。
第二步:定义int转char的函数接下来,我们需要定义一个int转char的函数。
这个函数将接收一个整数作为参数,并返回对应的字符。
函数的定义如下:cchar intToChar(int value) {return (char)value;}上述函数非常简单,它将整数值强制转换为字符类型,并将其作为结果返回。
请注意,在进行类型转换时需要小心,在某些情况下可能会导致错误结果。
第三步:处理特殊情况在进行字符转换时,有一些特殊情况需要额外注意。
例如,如果整数值超出了ASCII码表中字符的范围,转换将会失败。
因此,我们可以在函数中添加一些条件判断来处理这些特殊情况。
下面是一个改进后的函数示例:cchar intToChar(int value) {if (value < 0 value > 255) {处理超出ASCII码表范围的情况return '\0';}return (char)value;}在这个改进后的函数中,我们使用条件判断来检测整数值是否超出了ASCII码表的范围。
如果超出,则返回空字符'\0',表示转换失败。
第四步:测试函数完成函数定义后,我们应该对其进行测试,以确保它能够正确地转换整数为字符。
char类型和int类型之间的转换在视屏课程第⼆章⾥,我们已经学习了⼀些常⽤的数据类型转换。
然⽽,有⼀些时候我们会经常会遇到将char类型转换成int类型,或者需要将int类型转换为char类型的情况。
这⾥,我们来探讨⼀下这种不常⽤但是需要我们了解的类型转换。
将char类型转换成int类型⼀个汉字能转换成数字int类型吗?答案是可以的,因为计算机对汉字的储存也是通过某种编码规则相对应的数字来储存的。
在C#语⾔中,使⽤Unicode编码来存储字符。
⽐如汉字 ‘汉’,对应的Unicode编码是27721,在计算机内存中,将使⽤汗27721对应的⼆进制来存储。
因此,如果要把 ‘汉’ 转换为int类型的数字,转换的结果就是27721。
那使⽤什么样的代码来完成该转换呢?char类型的任何数据都可以隐式的转换为int类型。
既然是隐式转换,所以,下⾯的代码都是正确的:char a='汉'int b=a;Console.WriteLine(b);b='a';Console.WriteLine(b);运⾏以上代码会输出:27772197“汉”和'a'分别是277721和97.int转为char⽐如,我有⼀个int类型的变量27721,我想看看这个数字作为编码,对应的字符是什么?这种情况,就需要把int类型的数据转换为char类型。
int类型的数据转换为char类型时必须使⽤显⽰转换。
为什么必须使⽤显⽰转换呢?如果你看懂了char转为int⼀节,应该明⽩原因。
char类型的取值范围⼩于int,因此,将取值范围⼤的int类型转换为取值范围⼩的char类型是不安全的,所以要⽤显⽰转换。
下⾯的代码,是查看27721和97两个数字所代表的字符:int a=27721;char c=(char )a;Console.WriteLine(c);c=(char)97;Console.WriteLine(c);。
浅析Java中类型转换:String与int、long、Interger、char互相转换。
⼀、String 与 int、long、Interger、char 互相转换1、String 与 int 互相转换// String 转 intint i = Integer.valueOf(my_str).intValue();int i = Integer.parseInt(str);// int 转 StringString s = String.valueOf(i);String s = Integer.toString(i);String s = "" + i;2、long 转 String: 使⽤String.valueOf();类似的,可以把int,double等等都转换成String Long.valueOf(str);还能把String转换为long,不过需要确定是long型//⼀、String类⽅法,String.valueOf(),⽐如:long aa = 123;String a = String.valueOf(aa);//⼆、最简单的直接将long类型的数据加上⼀个空串long aa = 123;String a = aa+"";3、String 与 Ineger 互转(1)String 转 Integer 当我们要把String转化为Integer时,⼀定要对String进⾏⾮空判断,否则很可能报空指针异常。
String str = "...";Integer i = null;if(str!=null){i = Integer.valueOf(str);}(2)Integer 转 String//⽅法⼀:Integer类的静态⽅法toString()Integer a = 2;String str = Integer.toString(a)//⽅法⼆:Integer类的成员⽅法toString()Integer a = 2;String str = a.toString();//⽅法三:String类的静态⽅法valueOf()Integer a = 2;String str = String.valueOf(a); 1、通过toString()⽅法,可以把整数(包括0)转化为字符串,但是Integer如果是null的话,就会报空指针异常。
C语言int转char规则1. 简介在C语言中,int和char是两种不同的数据类型。
int是整数类型,通常占用4个字节(32位),而char是字符类型,通常占用1个字节(8位)。
当我们需要将int类型的数据转换为char类型时,需要遵循一定的规则。
本文将详细介绍C语言中int转char的规则,包括如何处理符号位、溢出情况以及一些常见的应用场景。
2. 规则2.1 符号位处理在将int转换为char时,首先需要考虑符号位。
如果int是有符号整数类型(即可以表示正负数),则需要将符号位保留。
如果int是无符号整数类型(只能表示非负数),则不需要考虑符号位。
对于有符号整数类型的int,可以使用强制类型转换或逻辑右移来提取最高有效位作为符号位。
例如:int num = -123;char c = (char)num; // 强制类型转换在上述代码中,num是一个有符号整数,值为-123。
通过将其强制转换为char类型,最高有效位被提取作为符号位,并赋值给变量c。
2.2 溢出情况由于char只占用1个字节,范围为-128到127(有符号)或0到255(无符号),当int的值超出这个范围时,会发生溢出。
对于有符号整数类型的int,如果其值超出了char的范围,将会截断为char能表示的最大或最小值。
例如:int num = 300;char c = (char)num;在上述代码中,num的值为300,超出了char能表示的范围。
因此,强制类型转换后,变量c的值将是最大可表示的有符号整数。
对于无符号整数类型的int,如果其值超出了char的范围,则只保留低8位,并忽略高位。
例如:unsigned int num = 400;char c = (char)num;在上述代码中,num的值为400,超出了char能表示的范围。
强制类型转换后,变量c只保留低8位(即400 mod 256),因此其值为144。
2.3 ASCII码在C语言中,字符类型char使用ASCII码来表示字符。
C语言中强制数据类型转换的总结● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned c har 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待,取值范围总是0~255)。
● 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。
double ←── float 高↑long↑unsigned↑int ←── char,short 低● 图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为dou ble型。
纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型,然后两者再进行运算,结果为long型。
所有这些转换都是由系统自动进行的,使用时你只需从中了解结果的类型即可。
这些转换可以说是自动的,但然,C语言也提供了以显式的形式强制转换类型的机制。
● 当较低类型的数据转换为较高类型时,一般只是形式上有所改变,而不影响数据的实质内容,而较高类型的数据转换为较低类型时则可能有些数据丢失。
赋值中的类型转换当赋值运算符两边的运算对象类型不同时,将要发生类型转换,转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。
具体的转换如下:(1) 浮点型与整型● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分,只保留整数部分。
将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式,即小数点后带若干个0。
注意:赋值时的类型转换实际上是强制的。
(2) 单、双精度浮点型● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。