[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

相关推荐
再睡一夏就好2 分钟前
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
linux·服务器·c语言·c++·笔记
꧁坚持很酷꧂8 分钟前
配置Ubuntu18.04中的Qt Creator为中文(图文详解)
开发语言·qt·ubuntu
不当菜虚困25 分钟前
JAVA设计模式——(四)门面模式
java·开发语言·设计模式
ruyingcai66666625 分钟前
用python进行OCR识别
开发语言·python·ocr
m0Java门徒33 分钟前
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
java·运维·开发语言·intellij-idea·idea
liuweidong080235 分钟前
【Pandas】pandas DataFrame radd
开发语言·python·pandas
农民也会写代码1 小时前
dedecms织梦arclist标签noflag属性过滤多个参数
开发语言·数据库·sql·php·dedecms
内网渗透1 小时前
Python 虚拟环境管理:venv 与 conda 的选择与配置
开发语言·python·conda·虚拟环境·venv
embedded_w1 小时前
U8G2在PC端模拟(C语言版本)
c语言
每次的天空2 小时前
kotlin与MVVM结合使用总结(三)
开发语言·microsoft·kotlin