- 论坛徽章:
- 0
|
是想做个用8个字节的unsigned long 存8个小于255的无符整数的小函数工具
在移位的时候 发现和预期不一样 超过32位的移不上去
请教各位 是我代码的问题 还是移位操作只能32位范围内
系统是64位的centos- #include <stdio.h>
- unsigned long SetByteToLong(unsigned long i, unsigned char c, int pos)
- {
- printf("i=%d (%.16x),c=%d,pos=%d\n", i , i, c ,pos);
- unsigned long tmpl = -1;
- printf("%.16x\n", tmpl);
- unsigned long llll = ((unsigned long)c) << (8*(pos-1));
- printf("%.16x\n", llll);
- tmpl = tmpl & llll;
- printf("%.16x\n", tmpl);
- i = tmpl | i;
- printf("%.16x, %.16x\n", i, i << 8);
- return i;
- }
- int main()
- {
- unsigned int aaa = 8;
- unsigned long bbb = 0;
- printf ("start:%d sizeof(unsigned long) =%d\n", aaa, sizeof(unsigned long));
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 1);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 2);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 3);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 4);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 5);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 6);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 7);
- bbb = SetByteToLong(bbb, (unsigned char)aaa, 8);
- printf ("end:%x \n", bbb);
- return 0;
- }
复制代码 执行结果- start:8 sizeof(unsigned long) =8
- i=0 (0000000000000000),c=8,pos=1
- 00000000ffffffff
- 0000000000000008
- 0000000000000008
- 0000000000000008, 0000000000000800
- i=8 (0000000000000008),c=8,pos=2
- 00000000ffffffff
- 0000000000000800
- 0000000000000800
- 0000000000000808, 0000000000080800
- i=2056 (0000000000000808),c=8,pos=3
- 00000000ffffffff
- 0000000000080000
- 0000000000080000
- 0000000000080808, 0000000008080800
- i=526344 (0000000000080808),c=8,pos=4
- 00000000ffffffff
- 0000000008000000
- 0000000008000000
- 0000000008080808, 0000000008080800
- i=134744072 (0000000008080808),c=8,pos=5
- 00000000ffffffff
- 0000000000000000
- 0000000000000000
- 0000000008080808, 0000000008080800
- i=134744072 (0000000008080808),c=8,pos=6
- 00000000ffffffff
- 0000000000000000
- 0000000000000000
- 0000000008080808, 0000000008080800
- i=134744072 (0000000008080808),c=8,pos=7
- 00000000ffffffff
- 0000000000000000
- 0000000000000000
- 0000000008080808, 0000000008080800
- i=134744072 (0000000008080808),c=8,pos=8
- 00000000ffffffff
- 0000000000000000
- 0000000000000000
- 0000000008080808, 0000000008080800
- end:8080808
复制代码 |
|