整形提升和数据截断

2023-11-08

整形提升和截断

1.整形提升

提升是将占字节小的元素赋给占字节大的元素时出现的补位现象。
截断是将所占字节大的元素赋给所占字节小的元素时会出现数值的舍去现象;

下面看代码来分析:

#include <stdio.h>

int main()
{
    char a= -1;
   // 原:1000 0001
   //反:1111 1110
   //补:1111 1111
    signed char b=-1;
    // 原:1000 0001
   //反:1111 1110
   //补:1111 1111
    unsigned char c=-1;
   // 原:1000 0001
   //反:1111 1110
   //补:1111 1111
    printf("a=%d,b=%d,c=%d",a,b,c);
    //在这以%d的形式输出,机会发生整形提升,在高位前补符号位,
    //因为char 和 signed char 类型在编译器中默认是一样的,所以提升之后输出结果一致,
    //但unsigned char默认是无符号类型,在内存中补码为1111 1111编译器默认最高位1不是符号位,
    //而是数值位,且提升为整形所以会在最高位前补0,补完之后为整形类型最高位为0,所以输出为255.
    return 0;
}

在这里插入图片描述

上述代码中,我们可以知道在内存中数据储存是补码,且操作数据也是对补码进行操作。
我们进一步可推:signed char取值范围:-128-127 unsigned char 0-255 其他类型也可以此推理
补位规则:
提升补高位,无符号数补0,有符号数补符合位。

不知道原码补码反码怎么转换可看:原码,反码,补码转换,以及其他数据类型的储存

在看这个代码:

#include <stdio.h>

int main()
{
    char a = -128;
    //首先-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
    //1000 0000-a
    //先将a提升到整形:1111 1111 1111 1111 1111 1111 1000 0000
    //%u打印时认为这个数是无符号所以最高位不是符号位
    //所以打印ff ff ff 80
    //下图运行所得为十进制
    printf("%u\n",a);
    return 0;
}

在这里插入图片描述

%u 打印无符号整形,认为内存中补码对应的是无符号的数

2.截断

将字节多的数据类型赋给一个占字节少的变量类型 ,会发生“截断”。

看如下代码:

#include <stdio.h>

int main()
{
	int i = 400;
	//0000 0000 0000 0000 0000 0001 1001 0000
	char a;
	a = i;
	//将后八位截断给到a。
	//a-1001 0000
	//然后a以%d输出整形提升a-11111 1111 1111 1111 1111 1111 1001 0000(补码)
	//反码:1111 1111 1111 1111 1111 1111 1000 1111 (-1)
	//原码:1000 0000 0000 0000 0000 0000 0111 0000(取反)- -112
	printf("%d\n", a);
	
	return 0;
}

在这里插入图片描述

如果帮到你的话,就请点个赞吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整形提升和数据截断 的相关文章

随机推荐

  • PHP之hash函数进行SHA256加密的方法

    SHA256加密的方法 function encrypt sha256 str return hash sha256 str SHA256Hex加密 function SHA256Hex str re hash sha256 str tru
  • 阿里实习offer成功上岸,这几点至关重要

    Hello 大家好 欢迎大家来到CSDN云原生计划 考生说 栏目 本期采访的是近期成功获得阿里巴巴暑假实习offer的CSDN云原生专业工程师计划学员的中南大学大三电子信息工程专业的刘贝同学和大家分享成功申请阿里巴巴暑假实习的经验以及面试经
  • 【Mysql】MySQL体系结构,InnoDB、MyISAM存储引擎,索引结构、分类、语法、性能分析

    1 MySQL体系结构 连接层 主要完成一些类似于连接处理 授权认证 及相关的安全方案 在该层上引入了线程池的概念 为通过认证安全接入的客户端提供线程 同样在该层上可以实现基于SSL的安全链接 服务器也会为安全接入的每个客户端验证它所具有的
  • JS实现直接插入排序

    直接插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴 但它的原理应该是最容易理解的了 因为只要打过扑克牌的人都应该能够秒懂 插入排序是一种最简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中
  • 浅谈BCrypt算法

    文章目录 前言 一 BCrypt算法是什么 二 使用步骤 1 对明文进行加密 2 验证 总结 前言 BCrypt算法是一种基于哈希算法的算法 所以 这种算法是不可逆的 一 BCrypt算法是什么 BCrypt算法是一种基于哈希算法的算法 所
  • 重复代码(克隆代码)的几个概念与类型

    本文内容来源于以下两篇参考文献 1 Chanchal K Roy James R Cordy Rainer Koschke Comparison and Evaluation of Code Clone Detection Techniqu
  • C++中的生命周期

    类A 含构造函数和析构函数 普通函数fun 函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObj main方法新建了类A的局部自动对象MainObj 调用fun方法 外面新建了A的的外部静态对象ExStaObj和外部对
  • echarts图环形图带百分比

    前言 整理一些echarts中比较有个性的 效果图 实现代码 option tooltip trigger item formatter a br b c d legend orient vertical left 10 data 直达 营
  • 计算机电缆外径相差太大,DJYPVP计算机电缆标准外径

    计算机电缆用途 本产品适用于额定电压30 500v及以下防干扰性能要求较高的电子计算机 检测仪器 仪表的连接 使用条件 计算机电缆 电压等级 0 45 0 75KV 企标 本产品使用于交流额定电压为300 500及以下 对于防干扰性能要求高
  • Could not get a resource from the pool 错误解决

    Could not get a resource from the pool 错误解决 错误信息 Could not get a resource from the pool 可能造成错误原因 1 没关闭Linux防火墙 查看防火墙状态 s
  • 10 个最适合开发人员的 GitHub 代码库 ✅

    在 GitHub 的帮助下 开发人员可以轻松访问并与他人共享他们的代码 它已成为开发人员在项目上进行协作并了解最新开发趋势的重要工具 对于开发人员而言 GitHub 是寻找最佳存储库以帮助他们完成开发项目的宝贵资源 有这么多可用的存储库 可
  • Intellij IDEA 中的 Debug 控制台/ Debug 控制台的 out 窗口不见了

    1 问题 Debug 控制台 Debug 控制台的 out 窗口不见了 2 问题解决方法 显示debug窗口 3 点击后 4 如果要恢复默认窗口布局 重新启动tomcat
  • 基于java车辆监管系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java车辆监管系统计算机毕业设计源码 系统 lw文档 mysql数据库 调试部署 基于java车辆监管系统计算机毕业设计源码 系统 lw文档 mysql数据库 调试部署 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发
  • git. 常用操作总结

    TOC GIT指南 在GIT中任何已经提交的东西几乎总是可以恢复的 甚至那些被删除的分支中的提交或使用 amend选项覆盖的提交也可以恢复 然而任何你未提交的东西丢失后很可能再也找不到 git pull会抓取所有的远程引用 Git在进行提交
  • 【通原】采样频率往往高于原信号的2倍的原因

    采样信号不是理想冲激信号 在采样前 需要添加一个抗混叠滤波器以避免频谱混叠 带宽越低越难设计 因此采样频率设计为原信号的3 5倍
  • paddleoc onnx转换推理

    目录 paddle 文字识别验证代码 onnx c 推理 python onnx识别部分推理示例 感谢博客 PaddleOCR转ONNX模型 推理部分 favorxin的博客 CSDN博客 paddleocr转onnx paddle 文字识
  • 2023年场外个股期权研究报告

    第一章 概况 场外个股期权 Over the Counter Equity Option 是指由交易双方根据自己的需求和意愿 通过协商确定行权价格 行权日期等条款的股票期权 与交易所交易的标准化期权不同 场外个股期权的合同内容可以根据交易双
  • .NET MVC标签扩展(checkbox,radio)

    NET MVC里面自动绑定form表单功能 如 Html TextBox Name Html Hidden hide 名称会自动与后台就行绑定ViewBag Name ViewBag hide 很实用 但是感觉不足的就是 Html Chec
  • Redis学习笔记(转尚硅谷周阳)

    教学视频 Redis官网 Redis中文官网 一 NoSQL入门概述 上 1 互联网时代背景下大机遇 为什么用NoSQL 1 1 单机MySQL的美好年代 在90年代 一个网站的访问量一般都不大 用单个数据库完全可以轻松应付 在那个时候 更
  • 整形提升和数据截断

    整形提升和截断 1 整形提升 2 截断 1 整形提升 提升是将占字节小的元素赋给占字节大的元素时出现的补位现象 截断是将所占字节大的元素赋给所占字节小的元素时会出现数值的舍去现象 下面看代码来分析 include