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

杂谈c语言——5.类型提升

1.习题一

#include <stdio.h>
int main()
{char a= -1;signed char b=-1;unsigned char c=-1;printf("a=%d,b=%d,c=%d",a,b,c);return 0;
}

结果为 -1 -1  255

(1)a:char(有符号)

源码 :  10000000000000000000000000000001      (第一个1为符号位)

反码 :  1111111111111111111111111111111111110      (符号位不动,其他取反)

补码:   1111111111111111111111111111111111111       (反码+1)

因为char只能读取一个字节,即8个bit位

所以a存储   11111111

因为要打印%d(有符号整数)    所以需要整形提升(按照a的类型补数据,a为char,补符号位的‘1’,若为unsign char 则需要补‘0’

a:11111111111111111111111111111111

打印%d(有符号整数)所以a视为有符号数的补码;

源码为:  10000000000000000000000000000001

打印出来为-1;

(3)

a:unsigned char(无符号)

源码 :  10000000000000000000000000000001      (第一个1为符号位)

反码 :  1111111111111111111111111111111111110      (符号位不动,其他取反)

补码:   1111111111111111111111111111111111111       (反码+1)

因为char只能读取一个字节,即8个bit位

所以a存储   11111111   (注意第一个‘1”不是符号位,因为是unsigned char(无符号)

要打印%d(有符号整数)

补’0‘

00000000000000000000000011111111

打印%d(有符号整数)所以a视为无符号数的源码;

打印出来为255;

2.习题二

#include <stdio.h>
int main()
{char a = -128;printf("%u\n",a);return 0;
}           //代码1
#include <stdio.h>
int main()
{char a = 128;printf("%u\n",a);return 0;
}          //代码2

代码1:

 

a:char(有符号)

源码 :  10000000000000000000000010000000      (第一个1为符号位)

反码 :  1111111111111111111111111111011111111     (符号位不动,其他取反)

补码:   1111111111111111111111111111110000000       (反码+1)

因为char只能读取一个字节,即8个bit位

所以a存储   10000000

因为要打印%u(无符号整数)所以需要整形提升(按照a的类型补数据,a为char,补符号位的‘1’,若为unsign char 则需要补‘0’

11111111111111111111111110000000;

打印%u(无符号整数)所以a视为无符号数的源码;

打印出来为:4294967168

代码2:

源码 :  00000000000000000000000010000000      (正数源反补一致)

补码:   00000000000000000000000010000000 

因为char只能读取一个字节,即8个bit位

所以a存储   10000000

因为要打印%u(无符号整数)所以需要整形提升(按照a的类型补数据,a为char,补符号位的‘1’,若为unsign char 则需要补‘0’

11111111111111111111111110000000;

打印%u(无符号整数)所以a视为无符号数的源码;

打印出来为:4294967168

3.习题三 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>using namespace std;int main()
{size_t a = 0;   相当于unsigned intint b = 2;while (b >= a){cout << b << endl;b--;}return 0;
}

注意   操作符的两边,若变量类型不一致,也会发生类型提升

第一次循环,b被类型提升为size_t,(x64下8个字节,x32下4个字节)

 注意:当b经历几轮循环后变成-1时

源码 :  10000000000000000000000000000001      (第一个1为符号位)

反码 :  1111111111111111111111111111111111110      (符号位不动,其他取反)

补码:   1111111111111111111111111111111111111       (反码+1)

转变为size_t(以4个字节为例)不需要补充 所以b视为无符号数的源码;

4294967295;

会导致无限循环

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 富格林:揭开黑幕面纱实现安全
  • Spark-环境启动
  • Oracle+ASM+High冗余详解及空间计算
  • Ubuntu24.04使用SRS 搭建 RTMP流媒体服务器
  • `kill -9` 和 `pkill`
  • 31集-33集【求助】AIGC返回的对话内容文字转语音失败-《MCU嵌入式AI开发笔记》
  • 驾驭时间之舟:SQL中时序数据处理的深度探索
  • ActiveMQ、RabbitMQ、Kafka、RocketMQ在事务性消息、性能、高可用和容错、定时消息、负载均衡、刷盘策略的区别
  • MFC系列-改变控件字体和颜色
  • 【经典算法】BFS_FloodFill算法
  • flume系列之:java.lang.OutOfMemoryError: unable to create new native thread
  • 【前端VUE】npm i 出现版本错误等报错 简单直接解决命令
  • 使用Windows11搭建代理服务器
  • 出海笔记精华问答|第三期
  • 【Leetcode 645 】 错误的集合 —— 纯数学 之 等差数列求和
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Hibernate最全面试题
  • HTML-表单
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript中的对象个人分享
  • nginx 负载服务器优化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Spring Cloud Feign的两种使用姿势
  • underscore源码剖析之整体架构
  • Vue.js源码(2):初探List Rendering
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue数据传递--我有特殊的实现技巧
  • 阿里云应用高可用服务公测发布
  • 诡异!React stopPropagation失灵
  • 精彩代码 vue.js
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端自动化解决方案
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 小试R空间处理新库sf
  • 一份游戏开发学习路线
  • 国内开源镜像站点
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​520就是要宠粉,你的心头书我买单
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (poj1.2.1)1970(筛选法模拟)
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)VirtualBox安装增强功能
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原)本想说脏话,奈何已放下
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)大型网站架构演变和知识体系
  • ******之网络***——物理***