关于char、unsigned char 的一些知识,如何判断机器的大小端

关于 signed 和 unsigned int 

在计算机解析在这个数的时候认为它存在符号位或者不存在符号位。

1)判断一个机器的大小端

 

#include<stdio.h>
#include<stdlib.h>
#if 1
int check_sys()
{
	int i = 1;
	return (*(char *)&i);
}
int main()
{
	int ret = check_sys();

	if (1 == ret)
		printf("小端\n");
	else
		printf("大端\n");
	system("pause");
	return 0;
}

看一个机器是大端还是小端就要看它里面数据的存储方式,小端是低位存在底地址中,可以看到将int *强转成char *,那么机器只会读一个字节八个比特位。然后解引用,看其实0还是1.

在这强调一句话,提升补得是符号位。

char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("%d,%d,%d\n", a, b, c);
    printf("%x,%x,%x\n", a, b, c);
    printf("%u,%u,%u\n", a, b, c);
	//char 的-1是8个1 输出int 有符号时是整型提升补符号位,即补26个1,输出是-1
	//signed char 是有符号 还是1111 1111 和上面的一样
	//unsigned char 首先进行截断,1111 1111 输出时整型提升 无符号 那么补28个0
	//输出255
    //输出无符号整数时,最高位不能当做符号位,当成普通的位

 

char a = -128;
	char b = 128;
	//128 1000 0000
	//-128 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000000
	//首先截断,都是1000 0000,无符号补24个0‬
	printf("%u,%u\n", a, b);

int i = -20;
	unsigned int j = 10;
	printf("%d\n", i + j > 0);

 

unsigned 与signed 相加的时候结果视为unsigned。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值