标签:style io color ar 使用 sp 文件 div on
#!/usr/bin/bash if [ $1 == "--help" -o $1 == "-h" ]; then echo "usage: OBASE; IBASE; NUMBER" else echo "obase=$1; ibase=$2; $3" | bc fi上面这个脚本, 保存为 tran 文件, 然后 chmod u+x ./tran 然后就可以
tran 10 2 111 # 10 是输出格式, 2 是输入格式 7
tran 10 16 FF # 10 是输出格式, 16 是输入格式 255
tran 10 17 34 Runtime warning (func=(main), adr=13):ibase too large, set to 16 52
union check { int i; char ch; } c; c.i = 1; printf("%d\n", (c.ch ==1));在小端机的存储是
0x 01 00 00 00
在大端机的存储是
0x 00 00 00 01
所以在 小端机的输出是 1, 在大端机的输出是 0
int a[5]; a[3] = 128; ((short *)a)[7] = 3; printf("%d\n", a[3]); // 196736假设 int 占 4 位, short 占 2 位, 一般是这样.
0x 80 00 00 00
然后是 ((short *)a[ 7],
0x 80 00 在第 6Byte,
0x 00 00 在第 7Byte, 就变成了 0x 03 00,
所以总的就是 0x 80 00 03 00
现在是计算, 计算的时候, 要化成正常的模式,
0x 00 03 00 80 == 00000000 00000011 00000000 10000000 == 196736
char a[4] = "abc"; int i = *(int *)a; printf("%d\n", i);a 数组的存储布局(小端机)是,
0x ‘a‘ ‘b‘ ‘\‘c‘ 0‘ == 01100011 01100010 01100001 00000000
输出的时候要转化成正常的顺序, 大端顺序
00000000 01100011 01100010 01100001 == 6513249
char c1 = 65; short s1 = c1; // 65 // c1: 0x 0100 0001 // s1: 0x 0000 0000 0100 0001 short s2 = 195; char c2 = s2; // 195 // s2: 0x 0000 0000 1100 0011 // c2: 0x 1100 0011 char c3 = 128; short s3 = c3; // c3: 0x 1000 0000 // s2: 0x 1111 1111 1000 0000 short s4 = -1; int i = s4; // s3: 1111 1111 // i: 1111 1111 1111 1111当位数少的时候, 赋值给位数多的, 赋值是看最高位的,
当位数多的时候, 赋值给位数少的, 赋值直接截取, 看 c2, s2,
float f = 7.0; short s = *(float *)&f; int i = *(int *)&f; printf("%d\n", s); // 0 printf("%d\n", i); // 1088421888f 用 IEE754 表示是, 0x40 E0 00 00,
所以就会用 0x 00 00 赋值给 s, 也就是 0.
e 而 i 就是 0x 00 00 E0 40, 也就是, 当然这是他在内存中的方式,
计算的时候就是 40E00000
在大端机测试的时候会是什么结果? (自己个人推测)
s = 0x40E0 i = 0x40E00000
标签:style io color ar 使用 sp 文件 div on
原文地址:http://www.cnblogs.com/sunznx/p/4084057.html