C 数据类型转换
来源:互联网 发布:对p2p网络信贷的看法 编辑:程序博客网 时间:2024/06/02 02:33
int a = -12;
printf(“%u”, a);
//4294967284
int a = 24;
00000000 00000000 00000000 00011000 原码
00000000 00000000 00000000 00011000 反码
00000000 00000000 00000000 00011000 补码
最高位代表符号位,0表示正,1表示负,只针对于有符号类型的数据.
整数的原码,反码,补码是一样的.
int b = -24
10000000 00000000 00000000 00011000 原码
11111111 11111111 11111111 11100111 反码(在原码基础上取反,符号位不参与取反过程)
11111111 11111111 11111111 11101000 补码(在反码的基础上+1)
当我们用%u格式控制符输出a时,计算机将会把它识别为
一个无符号的正整数.此时最高位上原本作位符号位的1
将被当作计数位,同时因为整数的原码反码补码是一样
的,所以直接输出得到4294967284;
数据转换:
当不同类型的数据参与运算时,低字节数据会自动转换为高字节数据的类型.
当给数据赋值时,等号右边的数据类型会自动转换成等号左边的数据类型.
float a = 1.3f, b = 1.5f;
float c1 = (int)(a + b), c2 = (int)a + b;
printf(“%f,%f”,c1 ,c2);
printf(“%lf”, (double)3 / 2);
printf(“%lf”, (double)(3/2));
强制转换得到所需类型的中间变量,原变量类型、变量值保持不变
精度缺失:发生在多字节数类型强制转化为少字节数类型时.
short a = 258; 97+128 //+256//+512
char b = a;
printf(“%c”,b);
00000001 01100001
01100001
当少字节数转化为多字节数的时候,多出来的位需要补0或补符号位.
具体取决于多字节数的类型是有符号还是无符号.
如果是无符号,统一补0,如果是有符号则将低字节数的最高位当作符号位去补.
如:
char a = 129;
short b = a;
a 129: 10000001 char型占一个字节
b ——– ——– 占两个字节
——– 10000001 后面八位直接搬进来
因为b是有符号类型,所以高八位需要补符号位,而此时符号位是1
所以补全之后的数据存储形式如下:
11111111 10000001
注意! 注意! 注意! 计算机存储数据是存的是二进制补码.
所以读取改数据时要还原成原码,正数不用管,负数则要遵循转换规则:
原码 = 反码取反
反码 = 补码 - 1;
反推得到原码: 10000000 11111111 即:-127;
- C中数据类型转换
- objective-C 数据类型转换
- c/c++数据类型转换
- C中数据类型转换
- C#:数据类型转换
- C语言数据类型转换
- C语言数据类型转换
- C语言数据类型转换
- C语音数据类型转换
- C数据类型转换
- C基本数据类型转换
- C语言数据类型转换
- C语言数据类型转换
- c语言数据类型转换
- c语言,数据类型转换
- C语言数据类型转换
- C 数据类型转换
- C语言数据类型转换
- 终端操作GitHub代码以及代码的版本控制(develop/master)多图
- 前端之css隐藏
- Spring学习-----ONE
- Filebeat + Elasitcsearch + Kibana 日志收集系统
- free看了《猎场》,自制力沦丧啊,写点国产剧猎场的台词感想吧
- C 数据类型转换
- SecureCRT介绍、安装、使用
- SpringMVC开发移动端接口(返回Json数据)
- powerdesigner打开某个pdm,提示”the model will be opened in read-only mode“,导致对pdm修改的时候保存不上,
- 面向对象--设计模式
- AI基础(一)期望和方差
- 线性回归----最小二乘法
- ROS引用其他package中库文件
- 拉格朗日对偶