-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;
}

代码很简单,问打印结果是什么?

下面我们来简单的分析一下,char a = -1;   

-1在内存中存储的是补码。 

-1的原码是:1000 0000 0000  0000 0000  0000 0000 0001

-1的反码是:1111 1111  1111    1111 1111   1111   1111 1110

-1的补码是:1111 1111  1111    1111 1111   1111   1111 1111   反码+1

char a接收-1的补码,由于char类型存储空间是1个字节8位,所以-1的补码要存储到char a中就要发生截断,把-1的补码从左到右数8位:1111 1111放到char a的空间内,后面要以十进制的方式打印a

就要发生整型提升,右侧补符号位,补到32位,结果为:

整型提升后a的补码:1111 1111  1111    1111 1111   1111   1111 1111 

整型提升后a的反码:1111 1111  1111    1111 1111   1111   1111 1110 (补码-1)

整型提升后a的原码:1000 0000 0000  0000 0000  0000 0000 0001

此时最高位(符号位)为1,后面的值是1,所以按10进制的格式打印的结果就是-1.

 

下面分析 signed char b = -1,这个和上面的分析是一样的结果也是一样的。没有什么好说的了。

下面分析 unsigned char c = -1 

-1在内存中存储的是补码。 

-1的原码是:1000 0000 0000  0000 0000  0000 0000 0001

-1的反码是:1111 1111  1111    1111 1111   1111   1111 1110

-1的补码是:1111 1111  1111    1111 1111   1111   1111 1111   反码+1

unsigned char c接收-1的补码,由于unsigned char类型存储空间是1个字节8位,所以-1的补码要存储到unsigned char c中就要发生截断,把-1的补码从左到右数8位:1111 1111放到unsigned char c的空间内,后面要以十进制的方式打印c 就要发生整型提升,右侧补符号位,由于unsigned为无符号,补0到32位,由于无符号数存储的原码,反码,补码相同,结果为:

c:0000 0000  0000 0000  0000 0000   1111 1111 

结果以十进制的格式打印就是255.

 自己可以试试结果:a=-1   b=-1   c=255

#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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解Python字符串格式化、input语句

目录 🥩1.1.字符串拼接 🥩1.2.对字符串格式化 🥩1.3.字符串精度 🥩1.4.快速格式化 🥩1.5.对表达式格式化 🥩1.6.黑马小练习 🥩2.1.input语句 🦐博客主页:大虾好吃吗的博客…

【前端知识】React 基础巩固(十八)——组件化开发(二)

React 基础巩固(十八)——组件化开发(二) 生命周期 生命周期是一个抽象的概念,在生命周期的整个过程中,分成了很多个阶段 比如装载阶段(Mount),组件第一次在 DOM 树中被渲染的过程比如更新过程…

【python】逻辑中断(and or)

今天学习javascript的时候竟然有一个额外收获:逻辑中断。而且我实验了一下,逻辑中断同样适用于python。 0 and 2返回: 0 1 and 2返回: 2 0 and 2返回的是0,而1 and 2返回的是2。就是因为在0那里出现了逻辑中断。 解…

大模型的数据瓶颈应该如何破除?看完这篇文章你就懂了

随着机器学习和深度学习技术的不断发展,大模型已经成为了现代人工智能研究和应用中的重要组成部分。然而,对于大模型而言,数据瓶颈问题仍然是一个亟待解决的挑战。尤其是在数据存量和质量方面,我们需要更加注重其影响,…

【Gradle】Gradle的概述与简单使用

一、概述 1.什么是Gradle? Gradle 是一种构建工具。 Java世界中主要有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹了,常见的就只有Maven和Gradle。 目前市面上Java开发,使用的构建工具基本都是Maven;安卓开…

C语言程序设计——数据在内存中的存储

一、数据类型介绍 1.基本内置类型 char // 字符数据类型 1 B short // 短整型 2 B int // 整型 4 B long // 长整型 4 or 8 B long long //更长的整型 8 B float //单精度浮点型 4 B double //双精…

解决Unity的PostProcess奇怪报错

大家好,我是阿赵。   最近在使用Unity的PostProcess后处理效果的时候,发现了一个问题,下面记录一下这个问题的出现原因和解决办法。 一、出现问题 问题是这样出现的:   在场景里面添加某一个后处理效果后,当这个后…

C# PaddleInference OCR文字识别(只识别)

说明 C# PaddleInference OCR文字识别(只识别),没有文字区域检测、文字方向判断 测试图片是文字区域检测裁剪出来、处理过的图片 完整的OCR识别查看 C# PaddleInference OCR识别 学习研究Demo_天天代码码天天的博客-CSDN博客 效果 项目 …

idea集成maven-mvnd

maven-mvnd是什么? 参考文档: Maven加强版 — mvnd的使用测试 - 知乎https://blog.csdn.net/cr898839618/article/details/122319874 1.下载mvnd安装包 Releases apache/maven-mvnd GitHub 2.修改配置文件:安装包中的conf目录下的mvnd.…

C++之函数模板高级用法(一百五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

rabbitmq使用springboot实现direct模式

一、 Direct模式 类型&#xff1a;direct特点&#xff1a;Direct模式是fanout模式上的一种叠加&#xff0c;增加了路由RoutingKey的模式。 二、coding Ⅰ 生产者 1、引入相应的pom文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

四十三、贪心——Huffman树、排序不等式

算法主要内容 一、Huffman树1、题目内容——合并果子2、算法思路&#xff08;1&#xff09;“合并果子”中的Huffman树&#xff08;2&#xff09;算法步骤&#xff08;3&#xff09;状态转移 3、题解 二、排序不等式1、题目内容——排队打水2、算法思路&#xff08;1&#xff0…