C入门知识点整理 【截断与提升】


  • 整型提升

整型提升: 当用所占字节数小于int(4字节32bit位)类型的数据类型去定义一个整型变量,并赋整数值时,由于各数据类型储存时所占字节的不同,导致该整数在内存中存储的二进制序列需要截断后储存,当我们用%d或%u的形式将其打印出时,需要进行整形的提升,最后输出的数值与最初的赋值可能会因为二进制序列的变化发生变化。


  • 具体步骤(以-1为例)

1.写出该整数的原码

-1的原码:
10000000 00000000 00000000 00000001

2. 根据原码写出补码

-1的补码:
11111111 11111111 11111111 11111111

3.截取对应数据类型表示的序列片段

char类型对应空间的序列片段即截取一个字节大小的数据(截取的片段是后八位)
 11111111

4.对片段进行整型提升

(1)无符号数整型提升时空位直接补0

00000000 00000000 00000000 11111111

(2)有符号数整型提升时高位补原符号位对应的数字

11111111 11111111 11111111 11111111

5.整型提升后换成原码(因为%d识别的是二进制的原码,所以要转换成原码)

(1)unsigned char a=-1

00000000 00000000 00000000 11111111(无符号数原码=反码=补码)(即十进制的255)

%d形式输出a=225

(2)signed char a=-1

10000000 00000000 00000000 00000001  (即十进制的-1)

%d形式输出-1


  • 注意%u是打印无符号数,%d打印有符号数,无符号数高位直接补0,有符号数则补原符号位的数。
     

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值