[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

相关推荐
Bat U7 分钟前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰18 分钟前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商31 分钟前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
foundbug9991 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
XDH_CS1 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界2 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵2 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
lzjava20242 小时前
Python的函数
开发语言·python
Awesome Baron3 小时前
skill、tool calling、MCP区别
开发语言·人工智能·python