判断大尾端小尾端
#include <stdio.h>
int main()
{
int tt = 1;
char *c = (char*)(&tt);
if(*c == 1)
{
printf("litte endian\n");
}
else
{
printf("big endian\n");
}
return 0;
}
{:9_241:} 本帖最后由 大可爱 于 2018-10-14 21:26 编辑
claws0n 发表于 2018-10-14 20:03
#include<stdio.h>
int main()
{
union
{
char s;
short int i;
} a;
a.i = 0x1234;
printf("%x,%x\n",a.s,a.s);
}
我的电脑是intel 机器,小尾端 这是定的了。
小尾端 低位有效字节存在低地址,高位有效字节存在高地址
对于1234这个数字,那么34 存在低地址,12 存在高地址
然后输出的时候,printf ,即先输出a.s即34 然后输出a.s 即12
这样的解释对吗
本帖最后由 claws0n 于 2018-10-14 21:44 编辑
大可爱 发表于 2018-10-14 21:24
我的电脑是intel 机器,小尾端 这是定的了。
小尾端 低位有效字节存在低地址,高位有效字节存在高地 ...
昨天的不清楚??你的 printf() 是怎么学的??
a.s = 34
a.s = 12
[ 高 | 低 ] //写反了,哈哈
补:
12 34
高 低
大可爱 发表于 2018-10-14 21:24
我的电脑是intel 机器,小尾端 这是定的了。
小尾端 低位有效字节存在低地址,高位有效字节存在高地 ...
你的机器是 little Endian,所以低位在前面 claws0n 发表于 2018-10-14 21:57
你的机器是 little Endian,所以低位在前面
低字节是不是就是 低位 大可爱 发表于 2018-10-14 22:06
低字节是不是就是 低位
嗯,不是很标准,哈哈,站在地址的角度 claws0n 发表于 2018-10-14 22:11
嗯,不是很标准,哈哈,站在地址的角度
一个字节最大255,
16进制的 034 也放得下,为什么不是 034 而是 34 大可爱 发表于 2018-10-14 22:36
一个字节最大255,
16进制的 034 也放得下,为什么不是 034 而是 34
{:10_257:} 16 进制最大是 FF,34 简直是小菜一碟
话说 typedef 怎么样了? 定义
大尾端:高位在低地址。
小尾端:低位在低地址。
在内存地址0的位置有一个4字节的变量,保存着0x12345678
小尾端
0 -> 78
1 -> 56
2 -> 34
3 -> 12
大尾端
0 -> 12
1 -> 34
2 -> 56
3 -> 78 人造人 发表于 2018-10-14 22:56
在内存地址0的位置有一个4字节的变量,保存着0x12345678
这个我理解,我就是 不懂 输出的时候非要输出
34
12
而不是
034
1
这种情况下,两个两个放这个是不是默认的,定义的。还是怎么回事。
claws0n 发表于 2018-10-14 22:53
16 进制最大是 FF,34 简直是小菜一碟
话说 typedef 怎么样了?
人造人 说的这句话
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
我觉得是对的
我就是觉得typedef int *INTEGER 就是将*INTEGER 整体作为int
我的理解就是 &(int) == INTEGER
所以INTEGER是一个数据类型 为 指向整形指针 型数据
这样理解对吗
大可爱 发表于 2018-10-14 23:00
这个我理解,我就是 不懂 输出的时候非要输出
34
12
跟硬体有关吧,都是 8 位为一个单元的,先不管,之后看汇编 大可爱 发表于 2018-10-14 23:06
人造人 说的这句话
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
到该帖子里 大可爱 发表于 2018-10-14 23:00
这个我理解,我就是 不懂 输出的时候非要输出
34
12
0x12345678 = 00010010 00110100 01010110 01111000
小尾端
0 -> 01111000 78
1 -> 01010110 56
2 -> 00110100 34
3 -> 00010010 12
0x1034 = 00010000 00110100
0 -> 00110100 34
1 -> 00010000 10
0x1034需要两个字节内存空间来存放
0x1034需要16bit内存空间来存放
低8位存放在低地址,高8位存放在高地址
0x1034 = 00010000 00110100
高8位是00010000
低8位是00110100
0 -> 00110100 34
1 -> 00010000 10
有什么问题吗? 大可爱 发表于 2018-10-14 23:06
人造人 说的这句话
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int
我说这个是错的,下面还加了3个问号
仔细体会我的语义
页:
[1]