数据类型转换&运算符

int a = -12;
printf(“%u”, a);
//4294967284

-12
源码:10000000 00000000 00000000 00001100
反码:11111111 11111111 11111111 11110011
补码:11111111 11111111 11111111 11110100

当我们用%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;

家庭作业:

1,已知 short a = x; char b = a;
如果printf(“%c”,b),得到’E’,
请问1000以内,x的值可以是多少?

2,-3%7; -7%2, 131%11; (-17)%(-12); -12%9; 9%-4;

3,将一个四位数abcd,变为dabc, 如:1234 转化成 4123;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值