大可爱 发表于 2018-10-14 19:41:23

判断大尾端小尾端


#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;

}



claws0n 发表于 2018-10-14 20:03:10

{:9_241:}

大可爱 发表于 2018-10-14 21:24:03

本帖最后由 大可爱 于 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:38:11

本帖最后由 claws0n 于 2018-10-14 21:44 编辑

大可爱 发表于 2018-10-14 21:24
我的电脑是intel 机器,小尾端 这是定的了。
小尾端 低位有效字节存在低地址,高位有效字节存在高地 ...

昨天的不清楚??你的 printf() 是怎么学的??
a.s = 34
a.s = 12
[ 高 | 低 ] //写反了,哈哈

补:
12 34
高 低

claws0n 发表于 2018-10-14 21:57:09

大可爱 发表于 2018-10-14 21:24
我的电脑是intel 机器,小尾端 这是定的了。
小尾端 低位有效字节存在低地址,高位有效字节存在高地 ...

你的机器是 little Endian,所以低位在前面

大可爱 发表于 2018-10-14 22:06:29

claws0n 发表于 2018-10-14 21:57
你的机器是 little Endian,所以低位在前面

低字节是不是就是      低位

claws0n 发表于 2018-10-14 22:11:19

大可爱 发表于 2018-10-14 22:06
低字节是不是就是      低位

嗯,不是很标准,哈哈,站在地址的角度

大可爱 发表于 2018-10-14 22:36:24

claws0n 发表于 2018-10-14 22:11
嗯,不是很标准,哈哈,站在地址的角度

一个字节最大255,
16进制的 034 也放得下,为什么不是 034 而是 34

claws0n 发表于 2018-10-14 22:53:22

大可爱 发表于 2018-10-14 22:36
一个字节最大255,
16进制的 034 也放得下,为什么不是 034 而是 34

{:10_257:} 16 进制最大是 FF,34 简直是小菜一碟
话说 typedef 怎么样了?

人造人 发表于 2018-10-14 22:56:04

定义
        大尾端:高位在低地址。
        小尾端:低位在低地址。


在内存地址0的位置有一个4字节的变量,保存着0x12345678

小尾端
0 -> 78
1 -> 56
2 -> 34
3 -> 12

大尾端
0 -> 12
1 -> 34
2 -> 56
3 -> 78

大可爱 发表于 2018-10-14 23:00:04

人造人 发表于 2018-10-14 22:56
在内存地址0的位置有一个4字节的变量,保存着0x12345678

这个我理解,我就是 不懂 输出的时候非要输出
34
12
而不是
034
1
这种情况下,两个两个放这个是不是默认的,定义的。还是怎么回事。

大可爱 发表于 2018-10-14 23:06:34

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是一个数据类型 为 指向整形指针 型数据

这样理解对吗

claws0n 发表于 2018-10-14 23:10:06

大可爱 发表于 2018-10-14 23:00
这个我理解,我就是 不懂 输出的时候非要输出
34
12


跟硬体有关吧,都是 8 位为一个单元的,先不管,之后看汇编

claws0n 发表于 2018-10-14 23:10:33

大可爱 发表于 2018-10-14 23:06
人造人 说的这句话
(*P_Max)(int *, int *)是一个int *
*(*P_Max)(int *, int *)是一个int


到该帖子里

人造人 发表于 2018-10-14 23:10:53

大可爱 发表于 2018-10-14 23:00
这个我理解,我就是 不懂 输出的时候非要输出
34
12



0x12345678 = 00010010 00110100 01010110 01111000

小尾端
0 -> 01111000        78
1 -> 01010110        56
2 -> 00110100        34
3 -> 00010010        12

人造人 发表于 2018-10-14 23:14:37

0x1034 = 00010000 00110100

0 -> 00110100        34
1 -> 00010000        10

人造人 发表于 2018-10-14 23:17:18

0x1034需要两个字节内存空间来存放
0x1034需要16bit内存空间来存放

低8位存放在低地址,高8位存放在高地址

0x1034 = 00010000 00110100
高8位是00010000
低8位是00110100

0 -> 00110100      34
1 -> 00010000      10

有什么问题吗?

人造人 发表于 2018-10-14 23:20:34

大可爱 发表于 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]
查看完整版本: 判断大尾端小尾端