大端小端,有符号无符号

学习目标:

`数据在内存中的存储


学习内容:

1.大端存储模式:数据的低位保存在内存的高位地址,数据的高位保存在内存的低位地址。
2.小端存储模式:数据的低位保存在内存的低位地址,数据的高位保存在内存的高位地址。
例如:0x11223344,这一个16进制数的最高位是1,最低位是8
在这里插入图片描述
3.百度笔试题:设计一个小程序判断当前机器的字节序

#include <stdio.h>
int main()
{
	int a = 1;
//char*类型指针一次访问一个字节,判断大端小端只要判断访问的这个字节上存的是01,还是00
	char* p =(char*)&a;//&a得到的地址是int*类型的,一次访问四个字节,为了访问一个字节,需要强制转换成char*类型
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
		printf("大端\n");
	return 0;
}

以此为基础还可以将其改为更为简便的函数返回值形式

#include <stdio.h>
int da()
{
	int a = 1;
	return *(char*)&a;
}
int main()
{
	if (da() == 1)
	{
		printf("小端\n");
	}
	else
		printf("大端\n");
	return 0;
}

4.有符号位进行高位提升,补的是符号位;无符号位进行高位提升,统一补0。
例如:在这里插入图片描述由这个结果可以看出char a是默认为有符号类型的。
高位提升:有符号位进行高位提升,补的是符号位;无符号位进行高位提升,统一补0。
-1的原码为:10000000000000000000000000000001
补码为:11111111111111111111111111111111
此后在补码上进行char类型变量赋值,只能赋值后八位(截断了),得到11111111
打印a的整数类型,整数类型是32位,现在char类型后只有8位了,所以需要“高位提升”。
提升后得到11111111111111111111111111111111(补码),因为打印出的是原码,所以把补码转换成原码,得到-1。由此可得b也是-1。
char c 的补码也是11111111,但是它高位提升后为00000000000000000000000011111111,转换成原码就是255。
5. %u是打印无符号整形,认为内存中存放的是一个无符号整形的补码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值