c语言强制转换四舍五入

合集下载

c语言term

c语言term

c语言term总体上必须清楚的:1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。

2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。

3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.4)bit是位是指为0或者1。

byte是指字节,一个字节=八个位.概念常考到的:1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。

C 语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、definePI3.1415926;这个写法是错误的,一定不能出现分号。

-3、每个C语言程序中main函数是有且只有一个。

4、在函数中不可以再定义函数。

5、算法:可以没有输入,但是一定要有输出。

6、break可用于循环结构和witch语句。

7、逗号运算符的级别最低,赋值的级别倒数第二。

第一章C语言的基础知识第一节、对C语言的基础认识1、C语言编写的程序称为源程序,又称为编译单位。

2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。

第二节、熟悉vc++1、VC是软件,用来运行写的C语言程序。

2、每个C语言程序写完后,都是先编译,后链接,最后运行。

(.c—.obj—.e某e)这个过程中注意.c和.obj文件时无法运行的,只有.e某e文件才可以运行。

(常考!)第三节、标识符1、标识符(必考内容):合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了2、标识符分为关键字、预定义标识符、用户标识符。

关键字:不可以作为用户标识符号。

maindefinecanfprintf都不是关键字。

迷惑你的地方If是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

预定义标识符:背诵definecanfprintfinclude。

计算机等级考试二级C语言常见知识点总结

计算机等级考试二级C语言常见知识点总结

计算机等级考试二级C语言常见知识点总结总体上必须清楚的:1)程序结构是三种: 顺序结构, 循环结构(三个循环结构), 选择结构(if 和switch)2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。

3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址.4)bit是位是指为0 或者1。

byte 是指字节, 一个字节= 八个位.5)一定要记住二进制如何划成十进制。

概念常考到的:1、编译预处理不是C语言的一部分,不再运行时间。

C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、每个C语言程序中main函数是有且只有一个。

3、在函数中不可以再定义函数。

4、算法的是一定要有输出的,他可以没有输入。

5、break可用于循环结构和switch语句。

6、逗号运算符的级别最低。

第一章1)合法的用户标识符考查:合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了。

关键字不可以作为用户标识符号。

main define scanf printf 都不是关键字。

迷惑你的地方If是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

2)实型数据的合法形式:2.333e-1 就是合法的,且数据是2.333×10-1。

考试口诀:e前e后必有数,e后必为整数。

.3)字符数据的合法形式::'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。

4) 整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节:考试时候一般会说,在16位编译系统,或者是32位系统。

碰到这种情况,不要去管,一样做题。

c语言浮点数转换整数

c语言浮点数转换整数

c语言浮点数转换整数C语言中浮点数转换为整数是一种常见的操作,本文将介绍如何在C语言中实现浮点数转换为整数的方法。

在C语言中,浮点数是指带有小数部分的数字,而整数则是不带小数部分的数字。

浮点数转换为整数的过程就是去掉小数部分,只保留整数部分的操作。

C语言中提供了两种实现浮点数转换为整数的方法,分别是向下取整和向零取整。

1. 向下取整向下取整是指将浮点数转换为比它小但最接近的整数。

在C语言中,可以使用强制类型转换的方法实现向下取整。

例如,将浮点数3.14转换为整数的过程如下:```cfloat f = 3.14;int i = (int)f;```通过将浮点数强制转换为整数,可以得到整数3,即向下取整的结果。

2. 向零取整向零取整是指将浮点数转换为离它最近的整数,但是要保证转换后的整数不大于原浮点数。

在C语言中,可以使用数学库函数floor()实现向零取整。

例如,将浮点数3.14转换为整数的过程如下:```c#include <math.h>float f = 3.14;int i = floor(f);```通过使用floor()函数,可以得到整数3,即向零取整的结果。

需要注意的是,浮点数转换为整数时可能会出现精度丢失的情况。

由于浮点数的表示方式和整数的表示方式不同,转换过程中可能会导致小数部分的丢失。

为了避免精度丢失,可以在转换之前先对浮点数进行四舍五入,然后再进行转换。

例如,将浮点数3.14转换为整数的过程如下:```cfloat f = 3.14;int i = (int)(f + 0.5);```通过在浮点数上加上0.5再进行转换,可以得到整数3,即四舍五入的结果。

除了向下取整和向零取整外,C语言还提供了向上取整和四舍五入等其他取整方式。

可以根据具体需求选择合适的方法进行浮点数转换为整数的操作。

本文介绍了在C语言中实现浮点数转换为整数的方法,包括向下取整、向零取整和四舍五入等方式。

C语言各知识点详细总结

C语言各知识点详细总结

C语言知识要点复习资料总体上必须清楚的:1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构。

2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。

3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.4)bit是位是指为0或者1。

byte是指字节,一个字节=八个位.概念常考到的:1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。

C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、define PI3.1415926;这个写法是错误的,一定不能出现分号。

3、每个C语言程序中main函数是有且只有一个。

4、在函数中不可以再定义函数。

5、算法:可以没有输入,但是一定要有输出。

6、break可用于循环结构和switch语句。

7、逗号运算符的级别最低,赋值的级别倒数第二。

第一章C语言的基础知识第一节、对C语言的基础认识1、C语言编写的程序称为源程序,又称为编译单位。

2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。

第二节、熟悉vc++1、VC是软件,用来运行写的C语言程序。

2、每个C语言程序写完后,都是先编译,后链接,最后运行。

(.c---→.obj---→.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。

(常考!)第三节、标识符1、标识符(必考内容):合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了2、标识符分为关键字、预定义标识符、用户标识符。

关键字:不可以作为用户标识符号。

main define scanf printf都不是关键字。

迷惑你的地方If是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

预定义标识符:背诵define scanf printf include。

c语言 浮点型转换为整数型

c语言 浮点型转换为整数型

C语言浮点型转换为整数型1. 前言在C语言中,我们经常需要进行不同数据类型之间的转换。

其中一种常见的转换是将浮点型数据转换为整数型数据。

本文将介绍如何在C语言中实现浮点型到整数型的转换,并提供一些示例代码。

2. 浮点型和整数型的区别在C语言中,浮点型和整数型是两种不同的数据类型。

2.1 浮点型浮点型数据用于表示实数,即带有小数部分的数字。

C语言中的浮点型数据有两种表示方式:单精度浮点型(float)和双精度浮点型(double)。

单精度浮点型占用4个字节,双精度浮点型占用8个字节。

2.2 整数型整数型数据用于表示整数,即不带小数部分的数字。

C语言中的整数型数据有多种表示方式,包括有符号整数和无符号整数,以及不同的字节大小(如int、short、long等)。

3. 浮点型转换为整数型的方法在C语言中,可以使用以下几种方法将浮点型数据转换为整数型数据。

3.1 强制类型转换强制类型转换是最简单的一种方法,可以通过将浮点型数据强制转换为整数型数据来实现转换。

强制类型转换使用的是C语言中的强制类型转换运算符(())。

float f = 3.14;int i = (int)f;在上述示例中,浮点型变量f的值为3.14,通过将f强制转换为整数型,将其赋值给整数型变量i,i的值将为3。

需要注意的是,强制类型转换会截断浮点数的小数部分,只保留整数部分。

这意味着,如果浮点数的小数部分较大,转换后的整数将丢失这部分信息。

3.2 向下取整除了使用强制类型转换,还可以使用向下取整的方法将浮点型数据转换为整数型数据。

向下取整是指将浮点数的小数部分直接舍去,只保留整数部分。

float f = 3.14;int i = (int)f;在上述示例中,浮点型变量f的值为3.14,通过将f强制转换为整数型,将其赋值给整数型变量i,i的值将为3。

需要注意的是,向下取整会丢失浮点数的小数部分,只保留整数部分。

这意味着,无论浮点数的小数部分是多少,转换后的整数都将是向下取整后的结果。

c语言强制转换四舍五入

c语言强制转换四舍五入

c语⾔强制转换四舍五⼊在C语⾔中,强制转换后的数是四舍五⼊还是去尾?去尾要想四舍五⼊的话(int)(number+0.5)都是直接去尾的。

当为数太多时直接截断。

所以在强制转换时要很注意C语⾔有没有数据的四舍五⼊?什么情况下会⽤到四舍五⼊?数据类型转换?有四舍五⼊的情况,在你想要保留⼏位⼩数的时候,多余的紧接着的⼀位要四舍五⼊不过C⾥⾯没有提供四舍五⼊的函数,不过你可以这样a = (int)(a*100 + 0.5)/100这只是⼀个⼩技巧,对a的第三位进⾏四舍五⼊提问者评价+0.5可以解决这个问题!谢谢你!C语⾔中的float和double类型数据是浮点数,所以⼩数部分就存在四舍五⼊问题,当指定输出位数在精度范围之内时,系统会⾃动舍⼊,⽆需⼈⼯⼲预,如果⼩数部分也在精度范围内,⽐如10.0/2.0 = 5.0,2位以上的输出位数时,后⾯的都是0,此时,当然不需要舍⼊了。

数据类型转换有两种⽅式,⼀种是默认强制转换,⽐如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会⾃动实施转换,这是因为,在精度更⾼时,这样的转换是内有损失的。

另⼀种是⼿动强制类型转换,⽐如dnum = (double)inum;,意思是将整形变量inum⾸先转换为双精度数据,然后再付给dnum。

当将⾼精度类型变量赋给低精度类型变量时,除⾮⼿动强制转换,否则,编译程序会有提⽰的。

数据强制转换是⽤舍弃的⽅法,不会⽤四舍五⼊,什么时候⽤四舍五⼊是需要详细说明的,也就是你的业务需求⽽定,你可以把数字+0.5,然后进⾏强制转换ouble强制转换成int型的时候保留整数部分的。

⽐如double a=1.5;int b=a;a就是1。

C语⾔强制类型转换问题2012-03-11 17:52匿名|分类:C/C++ |浏览2634次int a,b; //keil c⾥的int,也就是16位。

a=0000; b=0x1234;a=(char)(b);问题:此时a的值是?a的类型是?分享到:2012-03-11 19:08提问者采纳你好!⼀步⼀步来int a,b;这句的功能是操作系统为变量a,b分别分配⼀块空闲的存储空间以后使⽤a,b将相当于访问各⾃所对应的存储空间a = 0000;b = Ox1234;这句的功能是把0000放到变量a所对应的存储空间把0x1234放到变量b所对应的存储空间重点是下⾯这句a = (char)(b)它的功能相当于修改变量a的值,具体是这样操作的,从b所对应的存储空间中取出b的值即0x1234,然后把他转换成char类型,再然后将转换后的结果放到变量a所对应的存储空间,即覆盖掉原来的0000这个转换后的结果⼜是多少呢,是这样算的通常在C中int类型占4个字节⽽char类型占1个字节如果把⼀个int类型的数据以char类型输出,那么,编译器会⾃动丢弃int类型的前3个字节的内容对应本题int类型的数据b是0X1234 为⼗六进制在计算机中是这样存储的0000 0000 0000 0000 0001 0010 0011 0100共4个字节转换成char类型后,前3个字节丢弃即结果是0011 0100 共1个字节对应的⼗进制是52当语句a = (char)(b)执⾏完后这1个字节的值也就是52就放到了变量a所对应的存储空间,⽽不是原来的0000了所以,整个过程并没有改变变量a和b的数据类型原来是int类型现在还是int型,程序只是修改了变量a的值,连b的值都没有修改,因为修改a的值时只是从b所对应的存储空间⾥把b的值取出来⽤⼀⽤,⽤的结果是修改成char类型,但他把修改后的结果放到a所对应的存储空间了,并没有放到b所对应的存储空间,所以原来b所对应的值没有被覆盖,原来是0X1234,现在还是0X1234仅供参考!呵呵追问晕,你肯定是⽤VC的,所以在你理解⾥,int型的为32位,⽽我题⽬中就说了,我⽤的是keil c,⼀个int型的点2个字节,也就是16位。

C语言之四舍五入

在c语言中如果进行强制类型转换它会将所需要取的位数直接提取出来而其他位数的数字会被直接删除不会对提取出来的位数有任何影响
C语 言 之 四 舍 五 入
提取出来,而其他位数的数字会被直接删除,不会对提取出来的位数有任 何影响 所以如果我们需要提高精度,对所取的数进行四舍五入,需要给所需去的数的最后一位数的后一位加上5。
(1)将浮点型a=9.635625进行取整,得出整型b
b = (int)(a + 0.5); //==> b=4
(2)将浮点型a=3.659635取两位有效数字输出
printf("b = %5.2f",a + 0.005); //==> b=3.660
如果不是强制类型转换,对于浮点型数据来说,它会自己进行四舍五入

C语言知识点(完全版)汇总

C语言中最重要的知识点总体上必须清楚的 :1)程序结构是三种 : 顺序结构、选择结构 ( 分支结构 ) 、循环结构。

2)读程序都要从 main() 入口 , 然后从最上面顺序往下读 ( 碰到循环做循环 , 碰到选择做选择) ,有且只有一个 main 函数。

3) 计算机的数据在电脑中保存是以二进制的形式 . 数据存放的位置就是他的地址 .4) bit 是位是指为 0 或者 1。

byte 是指字节 , 一个字节 = 八个位 .概念常考到的:1、编译预处理不是 C 语言的一部分,不占运行时间,不要加分号。

C 语言编译的程序称为源程序,它以 ASCII 数值存放在文本文件中。

2、 define PI 3.1415926;这个写法是错误的,一定不能出现分号。

3、每个 C语言程序中main 函数是有且只有一个。

4、在函数中不可以再定义函数。

5、算法:可以没有输入,但是一定要有输出。

6、 break 可用于循环结构和switch语句。

7、逗号运算符的级别最低,赋值的级别倒数第二。

第一章 C 语言的基础知识第一节、对 C 语言的基础认识1、 C语言编写的程序称为源程序,又称为编译单位。

2、 C 语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个 C语言程序有且只有一个main 函数,是程序运行的起点。

第二节、熟悉 vc++1、 VC是软件,用来运行写的C语言程序。

2、每个 C 语言程序写完后,都是先编译,后链接,最后运行。

(.c---.obj---.exe )这个过程中注意.c 和 .obj文件时无法运行的,只有.exe文件才可以运行。

(常考!)第三节、标识符1、标识符(必考内容):合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了2、标识符分为关键字、预定义标识符、用户标识符。

关键字:不可以作为用户标识符号。

main define scanf printf都不是关键字。

C语言运算规则

C语言中强制数据类型转换2011-11-01 17:49:38| 分类:C/C++ | 标签:c语言类型转换|字号大中小订阅一、自动类型转换● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待,取值范围总是0~255)。

● 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。

double ←── float 高↑long↑unsigned↑int ←── char,short 低● 图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double 型再进行运算,结果亦为double型。

纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型,然后两者再进行运算,结果为long型。

所有这些转换都是由系统自动进行的,使用时你只需从中了解结果的类型即可。

这些转换可以说是自动的,但然,C语言也提供了以显式的形式强制转换类型的机制。

● 当较低类型的数据转换为较高类型时,一般只是形式上有所改变,而不影响数据的实质内容,而较高类型的数据转换为较低类型时则可能有些数据丢失。

二、赋值中的类型转换当赋值运算符两边的运算对象类型不同时,将要发生类型转换,转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。

具体的转换如下:(1) 浮点型与整型● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分,只保留整数部分。

将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式,即小数点后带若干个0。

注意:赋值时的类型转换实际上是强制的。

(2) 单、双精度浮点型● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。

c语言小数点进位取整

c语言小数点进位取整在C语言中,小数点进位取整是一种常见的数值处理方式。

当我们需要对小数进行四舍五入或者进位取整时,可以使用一些简单的方法来实现。

首先,我们需要明确一些基本概念。

在C语言中,小数可以表示为浮点数或者双精度浮点数。

浮点数使用float类型表示,而双精度浮点数使用double类型表示。

这两种类型的小数都可以进行进位取整操作。

对于四舍五入操作,我们可以使用round函数来实现。

round函数的原型如下:```cdouble round(double x);```该函数接受一个双精度浮点数作为参数,并返回最接近该数的整数值。

如果参数x的小数部分大于等于0.5,则返回大于x的最小整数值;否则,返回小于x的最大整数值。

下面是一个使用round函数进行四舍五入的例子:```c#include <stdio.h>#include <math.h>int main() {double num = 3.7;double rounded = round(num);printf("原始数值:%f\n", num);printf("四舍五入后的整数:%f\n", rounded);return 0;}```运行上述代码,输出结果如下:```原始数值:3.700000四舍五入后的整数:4.000000```可以看到,原始数值3.7经过四舍五入后变为了4.0。

除了使用round函数,我们还可以使用floor函数和ceil函数来进行进位取整操作。

floor函数的原型如下:```cdouble floor(double x);```该函数接受一个双精度浮点数作为参数,并返回不大于x的最大整数值。

ceil函数的原型如下:```cdouble ceil(double x);```该函数接受一个双精度浮点数作为参数,并返回不小于x的最小整数值。

下面是一个使用floor函数和ceil函数进行进位取整的例子:```c#include <stdio.h>#include <math.h>int main() {double num = 3.7;double floored = floor(num);double ceiled = ceil(num);printf("原始数值:%f\n", num);printf("向下取整后的整数:%f\n", floored);printf("向上取整后的整数:%f\n", ceiled);return 0;}```运行上述代码,输出结果如下:```原始数值:3.700000向下取整后的整数:3.000000向上取整后的整数:4.000000```可以看到,原始数值3.7经过向下取整后变为了3.0,经过向上取整后变为了4.0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在C语言中,强制转换后的数是四舍五入还是去尾?
去尾
要想四舍五入的话
(int)(number+0.5)
都是直接去尾的。

当为数太多时直接截断。

所以在强制转换时要很注意
C语言有没有数据的四舍五入?什么情况下会用到四舍五入?数据类型转换?有四舍五入的情况,在你想要保留几位小数的时候,多余的紧接着的一位要四舍五入
不过C里面没有提供四舍五入的函数,不过你可以这样
a = (int)(a*100 + 0.5)/100
这只是一个小技巧,对a的第三位进行四舍五入
提问者评价
+0.5可以解决这个问题!谢谢你!
C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。

数据类型转换有两种方式,一种是默认强制转换,比如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会自动实施转换,这是因为,在精度更高时,这样的转换是内有损失的。

另一种是手动强制类型转换,比如dnum = (double)inum;,意思是将整形变量inum首先转换为双精度数据,然后再付给dnum。

当将高精度类型变量赋给低精度类型变量时,除非手动强制转换,否则,编译程序会有提示的。

数据强制转换是用舍弃的方法,不会用四舍五入,什么时候用四舍五入是需要详细说明的,也就是你的业务需求而定,你可以把数字+0.5,然后进行强制转换
ouble强制转换成int型的时候保留整数部分的。

比如double a=1.5;
int b=a;
a就是1。

C语言强制类型转换问题
2012-03-11 17:52匿名|分类:C/C++ |浏览2634次
int a,b; //keil c里的int,也就是16位。

a=0000; b=0x1234;
a=(char)(b);
问题:
此时a的值是?a的类型是?
分享到:
2012-03-11 19:08提问者采纳
你好!
一步一步来
int a,b;
这句的功能是操作系统为
变量a,b分别分配一块空闲的存储空间
以后使用a,b将相当于访问各自所对应的
存储空间
a = 0000;
b = Ox1234;
这句的功能是
把0000放到变量a所对应的存储空间
把0x1234放到变量b所对应的存储空间
重点是下面这句a = (char)(b)
它的功能相当于修改变量a的值,
具体是这样操作的,从b所对应的存储空间中取出
b的值即0x1234,然后把他转换成char类型,再然后将
转换后的结果放到变量a所对应的存储空间,即覆盖掉
原来的0000
这个转换后的结果又是多少呢,是这样算的
通常在C中int类型占4个字节而char类型占1个字节
如果把一个int类型的数据以char类型输出,那么,编译器
会自动丢弃int类型的前3个字节的内容
对应本题
int类型的数据b是0X1234 为十六进制
在计算机中是这样存储的
0000 0000 0000 0000 0001 0010 0011 0100共4个字节
转换成char类型后,前3个字节丢弃
即结果是0011 0100 共1个字节对应的十进制是52
当语句a = (char)(b)执行完后
这1个字节的值也就是52就放到了变量a所对应的存储空间,
而不是原来的0000了
所以,整个过程并没有改变变量a和b的数据类型
原来是int类型现在还是int型,程序只是修改了变量a
的值,连b的值都没有修改,因为修改a的值时只是从b所
对应的存储空间里把b的值取出来用一用,用的结果是修改成
char类型,但他把修改后的结果放到a所对应的存储空间了,
并没有放到b所对应的存储空间,所以原来b所对应的值没有被
覆盖,原来是0X1234,现在还是0X1234
仅供参考!呵呵
追问
晕,你肯定是用VC的,所以在你理解里,int型的为32位,而我题
目中就说了,我用的是keil c,一个int型的点2个字节,也就是16
位。

当然这不影响理解“强制转换”这个概念。

总之,你的意思是:
a=(char)(b);
的结果是:a==0x0034,int型,b==0x1234,int型,对吗?
回答
最终结果:
变量a: int类型,其值是0x0034
变量b: int类型,其值不变,还是0x1234
我说的的确是vc中的,你的int类型是16个字节
那过程应该也一样,应该不影响你理解
呵呵
提问者评价
嗯,呵呵,谢谢大师!!
评论(3)|110
r1renhw|八级采纳率34%
擅长: C/C++ 数据结构及算法 C#/.NET JavaScript
其他类似问题
∙2007-12-25c语言中可以用强制类型转换8
∙2010-01-31c语言强制类型转换5
∙2013-04-30C语言中强制类型转换问题2
∙2013-10-14c语言题目强制类型转换1
更多关于c语言强制转换四舍五入的问题>>
按默认排序|按时间排序
其他3条回答
2012-03-11 17:56123冰霜雪月|六级
a是int型的
b是char型的
然后转换
类型转换就是(加上你要转的类型)
有问题再问
追问
这里b变成了char型??那它变成char型后值为多少?
它的值赋给a后,a类型不变?还有,a的值为多少?
评论|10
2012-03-11 18:26QQ925526512|四级
此时a的值是52,仍然是int型。

补:b的类型并没有发生变化,同样是int型,值也没有改变。

追问
a的值为0x0034?还是0x3400?
就是说,最终类型都不会变,只有在赋值的过程中暂时将b强制转换成char型,取低位(34)赋值给int型的a,a接收到一个char型的值的处理办法是也将这个值装在低位,对吗?
回答
1、(char)(b)是将b强制转换成char型(注:实际上b没有任何变化,你可以理解为一个中间结果。

),由于char只占8位,而b有16位,所以造成数据丢失(丢失的是高8位)。

2、将得到的8位赋值给a(16位),(注意!)两者类型不同,再次转换,低8位直接赋值,高8位全部补上0或1。

3、【先提及一下,计算机是以补码的形式存储数据的】
(char)(b)得到的是0x34,二进制原码为:0011 0100,补码为:0011 0100(正数的原码跟补码一样)。

2中提到的补0或补1,是由补码的最高位决定的,为0则补0,1则补1。

因此a最终的值为0 000 0000 0011 0100,化为十进制为52.
补:为什么要强调补0补1,及原码补码的问题?举个简单例子就能明白,若题目中的b的初值改为0x12F4,那么最终得到的a值将是-12 (十进制),而非0x00F4(16进制)
追问
同时也感谢你!!
只是百度的系统不能同时采纳两个标准答案*-*。

相关文档
最新文档