当前位置: 首页 > news >正文

整型提升整型提升练习题

目录

1.整型提升知识点

实例练习题1:

实例练习题2:

 实例练习题3(有坑):


小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 


1.整型提升知识点

1.什么是整型提升?

当我们在运用变量时,变量的补码不足整形的32bit位时,我们会将变量的补码提升到32bit位

整型提升需要遵循以下规则:

a. 如果是无符号数,则高位直接补0;
b. 如果是有符号数,则高位全补符号位。

注意点:整型提升提升的是补码,高位全补符号位指的也是补码的符号位


 例子:

负数的整型提升

char c = -1;

c 的二进制补码为1111 1111

如果以 %d 形式打印,因为%d是以十进制整数打印

所以要将c整型提升到32bit位

char为有符号的char,整型提升高位全补符号位即可

整型提升后:1111 1111 1111 1111 1111 1111 1111 1111

正数的整型提升:

char c = 1;
变量c的二进制补码为  0000 0001

如果以 %d 形式打印,因为%d是以十进制整数打印

所以要将c整型提升到32bit位

char是有符号的char,符号位是0,整型提升高位全补符号位

高位补整型提升后:0000 0000 0000 0000 0000 0000 0000 0001

无符号整数的整型提升:

        

unsigned char c = -1;

变量 c 的二进制补码为:1111 1111

unsigned char是无符号类型

如果以 %d 形式打印,因为%d是以十进制整数打印

所以要将c整型提升到32bit位

无符号类型整型提升高位全补0

整型提升后0000 0000 0000 0000 0000 0000 1111 1111

小知识:无符号类型没有原反补概念,它们的原反补码相同


实例练习题1:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{	char a = -1; //a的原码为1000 0000 0000 0000 0000 0000 0000 0001//反码为1111 1111 1111 1111 1111 1111 1111 1110//补码为1111 1111 1111 1111 1111 1111 1111 1111//因为char是有一个字节,所以只能存放8bit,最终存放的是1111 1111(存放的是补码)signed char b = -1;//与a一样,补码存放的是1111 1111unsigned char c = -1;//存放进c的补码也是1111 1111printf("a = %d,b = %d,c = %d", a, b, c);//%d,以十进制形式打印有符号整数// //a与b都是有符号的char类型,在以整数打印时,因为补码为1111 1111,以整数打印(32bit)需要整型提升,整型提升提升的是补码//a与b的补码1111 1111,有符号类型整型提升高位全补符号位//1111 1111 1111 1111 1111 1111 1111 1111,,整型提升后的补码//反码:1000 0000 0000 0000 0000 0000 0000 0000//原码:1000 0000 0000 0000 0000 0000 0000 0001.原码为-1//所以a,b都打印-1//c的补码为1111 1111//c进行整型提升,因为c是无符号整数,所以高位全补0//整型提升后补码:0000 0000 0000 0000 0000 0000 1111 1111//注意:c是无符号整数,无符号整数没有原反补概念,它们的原反补相等//c打印255return 0;
}

实例练习题2:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{	char a = -128;//-128的原码为1000 0000 0000 0000 0000 0000 1000 0000//反码为1111 1111 1111 1111 1111 1111 0111 1111//补码为1111 1111 1111 1111 1111 1111 1000 0000//a为char类型,存放8bit位,所以a的补码为1000 0000printf("%u", a);//%u 表示以十进制形式打印无符号整数//按照无符号十进制打印,需要整型提升,整型提升的是补码//a为有符号类型,整型提升高位全补符号位//整型提升后的补码1111 1111 1111 1111 1111 1111 1000 0000//反码为1000 0000 0000 0000 0000 0000 0111 1111//原码为1000 0000 0000 0000 0000 0000 1000 0000//打印出来的是原码,以无符号类型打印,无符号类型每一位都有效,所以是2的32次方-128 == 4294967168
}

 实例练习题3(有坑):

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{	char a = 128;//128的原码为0000 0000 0000 0000 0000 0000 1000 0000//正数原反补相同//a为char类型,存放8bit位,所以a的补码为1000 0000printf("%u", a);//%u 表示以无符号十进制形式打印无符号整数//按照无符号十进制打印,需要整型提升,整型提升的是补码//a为有符号类型,整型提升高位全补符号位// 注意:符号位指的是补码的符号位//整型提升后的补码1111 1111 1111 1111 1111 1111 1000 0000//反码:1000 0000 0000 0000 0000 0000 0111 1111// 原码:1000 0000 0000 0000 0000 0000 1000 0000//打印出来的是原码,以无符号类型打印,无符号类型每一位都有效,所以是2的32次方-128 == 4294967168
}

简述:整形提升后存储的原反补码,会根据printf想要打印的方式进行解读

8fdd48caf53e46a897fd8a5554dbb454.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用于稀疏自适应深度细化的掩码空间传播网络 CVPR2024
  • 前端基础知识+算法(一)
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 死亡对象判断方法
  • pytorch快速入门(一)—— 基本工具及平台介绍
  • WebGL系列教程八(GLSL着色器基础语法)
  • 采用qt做一个命令行终端
  • 面向对象程序设计之继承(C++)
  • ai 回答HFS是什么 HTTP的文件服务器是什么
  • Leetcode3282. 到达数组末尾的最大得分
  • new/delete和malloc/free到底有什么区别
  • VUE + NODE 历史版本安装
  • AWTK fscript 中的 value 扩展函数
  • synchronized的详解、锁的升级过程和优缺点比较
  • Maven 解析:打造高效、可靠的软件工程
  • JavaSE:9、数组
  • 4个实用的微服务测试策略
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • const let
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • k8s 面向应用开发者的基础命令
  • oschina
  • Python socket服务器端、客户端传送信息
  • Python实现BT种子转化为磁力链接【实战】
  • React系列之 Redux 架构模式
  • STAR法则
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 浮现式设计
  • 关于 Cirru Editor 存储格式
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 那些年我们用过的显示性能指标
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 时间复杂度与空间复杂度分析
  • 通信类
  • Mac 上flink的安装与启动
  • mysql面试题分组并合并列
  • ​2021半年盘点,不想你错过的重磅新书
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (C++)八皇后问题
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (五)c52学习之旅-静态数码管
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)IOS中获取各种文件的目录路径的方法
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .“空心村”成因分析及解决对策122344
  • .NET Core 成都线下面基会拉开序幕
  • .net framework4与其client profile版本的区别
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net的socket示例
  • /proc/vmstat 详解