请问C语言如何实现数据类型的强制转化? C语言数据类型的自动转换和强制转换有什么区别

c\u8bed\u8a00\u4e2d\u6709\u5173\u6570\u636e\u7c7b\u578b\u7684\u5f3a\u5236\u8f6c\u6362

\u77ed\u6574\u578bshort\u5360\u4e24\u5b57\u8282\uff0c\u5176\u6700\u5927\u6b63\u503c\u4e3a32767\uff0c\u5bf9\u5e94\u4e8c\u8fdb\u52360111 1111 1111 1111\u3002\u800c65535\u4e3a\u4e8c\u8fdb\u5236\u76841111 1111 1111 1111\uff0c\u6b64\u65f6a\u7684\u503c\u4e3a-1\u3002\u56e0\u800cc++\u540ec\u7684\u503c\u4e3a0\u3002
\u6ce8\u610f\uff1a\u65e0\u7b26\u53f7\u77ed\u6574\u578bunsigned short\u7684\u6700\u5927\u503c\u624d\u4e3a65535\u3002


强制类型转换
当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
1、显式强制类型转换
显式强制类型转换需要使用强制类型转换运算符,格式如下:
type(<expression>)

(type)<expression>
其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变。
2、隐式强制类型转换
隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量。在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如:
int nVar;
double dVar=3.88;
nVar=dVar;//执行本句后,nVar的值为3,而dVar的值仍是3.88

1,若已知x,y为double类型,则表达式:x=1,y=x+3/2结果是多少啊?

因为x,y都是double型,所以执行了y=x+3/2这个语句后,会输出小树部分,double型默认的是小数点后几位我忘了,你自己调试下,就会明白了!



在C语言中,强制类型转换的格式为:(类型)变量或表达式。
而在C++语言中,强制类型转换的格式为:类型(变量或表达式)。
例如float a=3.14,将其强制转移成int型并赋给整型变量b,C语言为:b=(int)a;C++为:b=int(a)。
另外,补充说明一下,整型和字符型其实是通用的,在计算机中字符存的是其ASCII值。


C编译器中整型常量默认为int型,即65这个数是int型的,由于65<127(char型的范围[-128,127]),可以转化为char型即char c=65;合法,使用输出语句printf("%c", c);可以输出他的字符形式即'A'。
对于其他类型的转换,如果精度不损失可以默认转换,如:
char c = 65;
int i = c;//默认转换
否者需要强转,如:
int i = 65;
char c = (int)i;//强转

#include <iostream>
using namespace std;

int main(){
char c='A';
cout<<(int)c<<endl;
//使用(int)进行强制转换,结果为65
int a=65;
cout<<(char)a<<endl;
//使用(char)进行强制转换,结果为A
system("pause");
return 0;
}

  • 璇烽棶C璇█濡備綍瀹炵幇鏁版嵁绫诲瀷鐨寮哄埗杞寲?
    绛旓細type锛<expression>锛夋垨 锛坱ype锛<expression> 鍏朵腑锛宼ype涓虹被鍨嬫弿杩扮锛屽int锛宖loat绛夈<expression>涓鸿〃杈惧紡銆傜粡寮哄埗绫诲瀷杞崲杩愮畻绗﹁繍绠楀悗锛岃繑鍥炰竴涓叿鏈塼ype绫诲瀷鐨勬暟鍊硷紝杩欑寮哄埗绫诲瀷杞崲鎿嶄綔骞朵笉鏀瑰彉鎿嶄綔鏁版湰韬紝杩愮畻鍚庢搷浣滄暟鏈韩鏈敼鍙橈紝渚嬪锛歩nt nVar=0xab65;char cChar=char (nVar);涓婅堪寮哄埗绫诲瀷...
  • C璇█鍙互寮哄埗杞崲鏁版嵁绫诲瀷鍚?
    绛旓細鍙互浣跨敤寮哄埗杞崲锛屽叾涓鑸舰寮忎负锛氾紙绫诲瀷璇存槑绗︼級 (琛ㄨ揪寮) 鍏跺姛鑳芥槸鎶婅〃杈惧紡鐨勮繍绠楃粨鏋滃己鍒惰浆鎹㈡垚绫诲瀷璇存槑绗︽墍琛ㄧず鐨勭被鍨嬨備緥濡傦細 (float) a 鎶奱杞崲涓烘诞鐐瑰瀷锛(int)(x+y) 鎶妜+y鐨勭粨鏋滆浆鎹负鏁村瀷銆傝繖绉嶆柟娉曟樉鐒跺娴偣鍨嬫暟鎹殑绮惧害浼氭湁褰卞搷锛屼笖娉ㄦ剰鏈缁堣緭鍑虹殑褰㈠紡涓嶅悓缁撴灉涔熸槸涓嶅悓鐨勶紝鑻ヨ淇濈暀鏁板瓧...
  • C璇█寮哄埗绫诲瀷杞崲
    绛旓細寮哄埗绫诲瀷杞崲鏄妸鍙橀噺浠庝竴绉嶇被鍨嬭浆鎹负鍙︿竴绉嶆暟鎹被鍨嬨備緥濡傦紝濡傛灉鎮ㄦ兂瀛樺偍涓涓 long 绫诲瀷鐨勫煎埌涓涓畝鍗曠殑鏁村瀷涓紝鎮ㄩ渶瑕佹妸 long 绫诲瀷寮哄埗杞崲涓 int 绫诲瀷銆傛偍鍙互浣跨敤寮哄埗绫诲瀷杞崲杩愮畻绗︽潵鎶婂兼樉寮忓湴浠庝竴绉嶇被鍨嬭浆鎹负鍙︿竴绉嶇被鍨嬨
  • c璇█涓,娴偣鍨嬭浆鎹负鏁村瀷鍙互鐢:
    绛旓細1銆佸己鍒剁被鍨嬭浆鎹 寮哄埗绫诲瀷杞崲鏄氳繃绫诲瀷杞崲杩愮畻鏉ュ疄鐜扮殑銆傚叾涓鑸舰寮忎负锛氾紙绫诲瀷璇存槑绗︼級锛堣〃杈惧紡锛夛紝鍏跺姛鑳芥槸鎶婅〃杈惧紡鐨勮繍绠楃粨鏋滃己鍒惰浆鎹㈡垚绫诲瀷璇存槑绗︽墍琛ㄧず鐨勭被鍨嬨備緥濡傦細 (double) a 鎶奱杞崲涓哄弻绮惧害娴偣鍨嬶紝(int)(x+y) 鎶妜+y鐨勭粨鏋滆浆鎹负鏁村瀷銆2銆佽嚜鍔ㄧ被鍨嬭浆鎹 锛1锛夋墽琛岀畻鏈繍绠楁椂锛屼綆绫诲瀷(...
  • 鎵嬪啓C璇█涓己鍒剁被鍨嬭浆鎹绠楁硶
    绛旓細C璇█锛屼娇鐢ㄤ竴鍧楀唴瀛樺瓨鍌ㄥ彉閲忋傚綋纭畾鍙橀噺绫诲瀷鏃讹紝涔熷氨纭畾閲岃鍙栬繖鍧楀唴瀛橈紙鎸囧畾鐨勫唴瀛樺湴鍧锛夌殑鏂瑰紡銆備緥濡傦紙const琛ㄧず鍙瀛樺偍鍖猴紝char琛ㄧず浠庡湴鍧寮濮嬭1涓猙yte,int琛ㄧず璇4涓猙yte绛夛級銆鎵璋撳己鍒剁被鍨嬭浆鎹锛屽氨鏄涓涓寚瀹氳鍙栨柟寮忕殑鍐呭瓨锛岄噰鐢ㄥ叾浠栬鍙栨柟寮忔潵璇诲彇鐨勮涓恒備緥濡俵ong杞琲nt锛堜袱绉嶇浉鍚岀殑鍐呭瓨璇诲彇...
  • 銆怌璇█銆C璇█涓,鑷畾涔夌殑鏁版嵁绫诲瀷鑳藉惁鐢ㄤ簬寮哄埗绫诲瀷杞崲?
    绛旓細鍦–璇█涓紝鑷畾涔夌殑鏁版嵁绫诲瀷涔熸槸鍙互鐢ㄤ簬寮哄埗绫诲瀷杞崲鐨勩備妇涓渶鍩烘湰鐨勪緥瀛愶紝鑷畾涔夌殑璁板綍浣撶被鍨嬶紝褰撴柊鐢宠鍔ㄦ佹暟鎹妭鐐规椂锛屽氨蹇呴』浣跨敤鑷畾涔夌殑鏁版嵁绫诲瀷杩涜寮哄埗绫诲瀷杞崲銆
  • 闂竴涓C璇█寮哄埗杞崲鏁版嵁绫诲瀷鐨闂
    绛旓細杩欎釜涓嶆槸鎶奱寮哄埗杞崲鎴恑nt鍨嬩箣鍚庡氨鍙樻垚83浜嗭紝鑰屾槸a鏈韩灏辨槸83锛岃櫧鐒跺啓浜嗭紙int锛夎〃绀鸿杞崲锛屼絾a鏈韩灏辨槸int鍨嬶紝鎵浠ヤ篃灏变笉瀛樺湪杞崲浜嗐傚洜涓 a=0123锛涜繖閲岀殑0123鍓嶉潰鐨勮繖涓0鎸囩殑鏄123涓嶆槸鍗佽繘鍒讹紝鑰屾槸鍏繘鍒讹紝鍏繘鍒剁殑123=1*64+2*8+3=64+18+3=83 ...
  • C璇█涓暟鎹被鍨杞崲鐨勬柟寮忔湁鍑犵?
    绛旓細C璇█涓暟鎹被鍨嬭浆鎹㈢殑鏂瑰紡鏈変袱绉嶏細鑷姩绫诲瀷杞崲鍜寮哄埗绫诲瀷杞崲銆
  • C璇█涓暟鎹被鍨嬪浣杩涜绫诲瀷杞崲
    绛旓細寮哄埗杞崲 姣斿 int n=5; char c; c=(char)n;鐩存帴璧嬪 c = n; 涓嶆帹鑽 鏈変簺绫诲瀷鐨杞崲缂栬瘧鍣ㄥ彲鑳戒細缁欏嚭璀﹀憡 鑰屼笖杩欐牱鐨勭紪绋嬮鏍间笉濂 鍏朵粬鏂规硶 鎴 涔 涓 鐭 閬
  • 扩展阅读:十大编程语言排名 ... c语言的三种基本类型 ... c语言四个基本类型 ... 数据类型有哪些 统计学 ... c语言的三种基本数据 ... c语言必背100代码 ... c语言如何实现5行数据 ... 整型数据类型包括哪些 ... c语言八大基本数据类型 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网