C语言陷阱——类型转换】的更多相关文章

以下例子取自<深入理解计算机系统>. 考虑如下的C语言代码: #include<stdio.h> typedef unsigned char* byte_pointer; void show_bytes(byte_pointer pointer, int size){ ; ; i < size; ++i){ printf("%.2x", pointer[i]); } } int main(){ ; unsigned uy = sx; printf(&quo…
1.自动类型转换 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255(有些机器把char型当做unsighed char型对待, 取值范围总是0-255). 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示. 图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转…
C语言内可以进行类型转换: 强制类型转换 隐式类型转换 强制类型转换的语法: (tpye)value (type)value_name 强制类型转换的结果: 目标类型可以容纳目标值:结果不变 目标值不要能容纳目标值:结果将产生截断 注意:不是所有的强制类型转换都可以成功,当不能进行强制类型转换的时候,编译器将产生错误信息 示例代码1: #include <stdio.h> struct TS { int i; int j; }; struct TS ts; int main() { short…
数据类型有  基本数据类型 和  引用数据类型 两大类型. 数据类型 C#语言 .NET(通用语言) 大小(字节) 值区间 基本数据类型 值类型 整型 不能存在小数点,可以有负数 byte Byte 1 0~255 short Int16 2 int Int32 4 long Int64 8 浮点型 有小数点/负数 foat Single 4 double Double 8 decomal Decimal 16 字符型 只能存在一个字符 char Char 2 任意字符 布尔型 判断对错 boo…
类型转换 自动转换 小范围的类型能够自动转换成大范围的类型.short->int->long->float->double 强制类型转换 (类型名)变量或数值 #include <stdio.h> #include <stdlib.h> // standared 标准 // input output 输入/输出 // header 头 .h头文件 int main() // 返回int,如果是void表示没有返回 { // 大类型就相当于把一瓶酒中的水,倒入…
一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 +100.5f=%f \n",    (float)3/(float)2 +100.5f); // (float) 前缀 二.自动类型转换和隐式类型转换 例1: printf ("    3/2+100.5=%f \n",       (float)3/2 +100.5f); p…
1.自动类型转换 自动类型转换又称作隐式转换,可以将一个int变量转换为float类型. public class Conver { public static void main(String[] args) { byte mybyte = 127; int myint = 150; float myfloat = 452.12f; char mychar = 10; double mydouble = 45.46546; System.out.println("byte型与float型数据进…
自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.(eg:int型和long型运算时,先把int量转成long型后再进行运算.) a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型 3) 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算. 4) char型和short型参…
变量的数据类型是可以转换的.转换的方法有两种,一种是自动转换,一种是强制转换. 自动转换 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成.自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行运算. 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算. char型和short型参与运…
在Stack overflow上看到这样一个问题. 计算如下表达式的值: P=(1/2-3/4)*(5/6-7/8)*…*[n/(n-1) - (n+2)/(n+3)]. 程序如下: #include<stdio.h> int main () { float s, p = 1.0; int i, n; printf("Put a number:"): scanf("%d", &n): ; i <= n; i=i+) { p *= ((i)/…