[C语言]大小端及整形输出问题

假设在一个32位little endian 的机器上运行下面的程序,结果是多少 ?

1.1先看以下三个程序

c 复制代码
#include <stdio.h>
int main()
{
	long long a = 1, b = 2, c = 3;
	printf("%lld %lld %lld\n", a, b, c);     // 1 2 3
	printf("%d %d %d %d %d %d\n", a, b, c);  // 1 0 2 0 3 0
	return 0;
}
c 复制代码
#include <stdio.h>
int main()
{
	long long a = -2;
	printf("%lld\n", a);   //-2
	printf("%d %d\n", a);  //-2 -1
	return 0;
}

1.2分析&&解答

  1. 正数原反补相同
  2. 123的补码如下
    1: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
    小端存储: 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    2: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010
    小端存储: 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    3: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011
    小端存储: 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  3. 3个long long的数被当成int 去截断 所以3个数最后可以输出6个int数
  4. 补码是一种形式 存储是小端形式 获取的时候还要再对调回来 所以结果依次是1 0 2 0 3 0

-2: 原码反码补码

1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010

1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1101

1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110

小端存储
1110 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111

分成两部分

第一部分的正常形式1111 1111 1111 1111 1111 1111 1111 1110

原码:

1111 1111 1111 1111 1111 1111 1111 1101

1000 0000 0000 0000 0000 0000 0000 0010 ==> -2

第二部分的正常形式1111 1111 1111 1111 1111 1111 1111 1111

原码:

1111 1111 1111 1111 1111 1111 1111 1110

1000 0000 0000 0000 0000 0000 0000 0001 ==> -1

所以输出为-1

相关推荐
一只小bit25 分钟前
C++之初识模版
开发语言·c++
王磊鑫1 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿1 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手1 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
喜-喜1 小时前
C# HTTP/HTTPS 请求测试小工具
开发语言·http·c#
ℳ₯㎕ddzོꦿ࿐1 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
一水鉴天1 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
轩辕烨瑾3 小时前
C#语言的区块链
开发语言·后端·golang