由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - unsigned long long
相关主题
怎么得到char *分配空间的大小?入门问题,perl里s@\_@@g 是什么意思?
gcc 优化不优化运算结果不一样?gcc 的 bug?little endian vs big endian
一个integer promotion问题free(char *)的问题 (转载)
GCC 居然允许变量长度的向量大家看看这个简单的qsort排序的问题
Help needed on coding for Fibonacci seriesc++ template中如何判断类型
请教一个结构体占内存大小的问题What is size_t mean in C?
指针的大小是 4 byte还是有赖于系统?再问一个free()的问题
问一个defining array 的问题func调用结束时出错
相关话题的讨论汇总
话题: ullong话题: unsigned话题: long话题: sizeof话题: 0x%
进入Programming版参与讨论
1 (共1页)
i**p
发帖数: 902
1
哪位大牛能解释一下ullong 1, ullong 2, ullong 4, ullong 5 的输出吗?
此程序在 Android (GB) emulator 上运行。
//刚刚发现,程序中的反斜杠都被mitbbs过滤掉了。
printf("sizeof(unsigned int): %dn", sizeof(unsigned int));
printf("sizeof(unsigned long): %dn", sizeof(unsigned long));
printf("sizeof(unsigned long long): %dn", sizeof(unsigned long long));
unsigned int uint=0x01020304;
printf("uint: 0x%xn", uint);
unsigned long ulong=0x01020304;
printf("ulong 1: 0x%xn", ulong);
printf("ulong 2: 0x%lxn", ulong);
unsigned long long ullong=0x0102030405060708;
printf("ullong 1: 0x%xn", ullong);
printf("ullong 2: 0x%lxn", ullong);
printf("ullong 3: 0x%llxn", ullong);
ullong=0;
printf("ullong 4: 0x%xn", ullong);
printf("ullong 5: 0x%lxn", ullong);
printf("ullong 6: 0x%llxn", ullong);
output from Android Emulator.
sizeof(unsigned int): 4
sizeof(unsigned long): 4
sizeof(unsigned long long): 8
uint: 0x1020304
ulong 1: 0x1020304
ulong 2: 0x1020304
ullong 1: 0x8c48
ullong 2: 0x8c58
ullong 3: 0x102030405060708
ullong 4: 0x8c79
ullong 5: 0x8c8b
ullong 6: 0x0
这是在Ubuntu上的运行结果
sizeof(unsigned int): 4
sizeof(unsigned long): 8
sizeof(unsigned long long): 8
uint: 0x1020304
ulong 1: 0x1020304
ulong 2: 0x1020304
ullong 1: 0x5060708
ullong 2: 0x102030405060708
ullong 3: 0x102030405060708
ullong 4: 0x0
ullong 5: 0x0
ullong 6: 0x0
d****i
发帖数: 4809
2
I guess the difference in sizeof(long) on Android and Ubuntu is because
Android is a 32-bit OS and ARM is 32-bit architecture. Therefore, gcc-arm-
linux will treat long as 32-bit instead of 64-bit. While I guess your Ubuntu
is 64-bit version, therefore gcc will treat long as 8 bit.

【在 i**p 的大作中提到】
: 哪位大牛能解释一下ullong 1, ullong 2, ullong 4, ullong 5 的输出吗?
: 此程序在 Android (GB) emulator 上运行。
: //刚刚发现,程序中的反斜杠都被mitbbs过滤掉了。
: printf("sizeof(unsigned int): %dn", sizeof(unsigned int));
: printf("sizeof(unsigned long): %dn", sizeof(unsigned long));
: printf("sizeof(unsigned long long): %dn", sizeof(unsigned long long));
: unsigned int uint=0x01020304;
: printf("uint: 0x%xn", uint);
: unsigned long ulong=0x01020304;
: printf("ulong 1: 0x%xn", ulong);

d****n
发帖数: 1241
3
C99 n1256: 7.19.6.1 第9项:
"If any argument is not the correct type for the corresponding conversion
specification, the behavior is undefined"
好奇一下,为什么要用“%x“打印一个unsigned long long呢?一般而言,尽量不要在
C代码里尝试C的这些corner cases。有时候,个人感觉是对的,但是实际上标准里规定
是ub,或者在某些很极端的情况下,标准也是有点含糊(或者有矛盾的)的,例如对于
union的一些操作。。。

【在 i**p 的大作中提到】
: 哪位大牛能解释一下ullong 1, ullong 2, ullong 4, ullong 5 的输出吗?
: 此程序在 Android (GB) emulator 上运行。
: //刚刚发现,程序中的反斜杠都被mitbbs过滤掉了。
: printf("sizeof(unsigned int): %dn", sizeof(unsigned int));
: printf("sizeof(unsigned long): %dn", sizeof(unsigned long));
: printf("sizeof(unsigned long long): %dn", sizeof(unsigned long long));
: unsigned int uint=0x01020304;
: printf("uint: 0x%xn", uint);
: unsigned long ulong=0x01020304;
: printf("ulong 1: 0x%xn", ulong);

d****n
发帖数: 1241
4
c99标准规定sizeof(int_type)是implementation defined的。
但是我感觉他问的不是sizeof(...)输出的差别

Ubuntu

【在 d****i 的大作中提到】
: I guess the difference in sizeof(long) on Android and Ubuntu is because
: Android is a 32-bit OS and ARM is 32-bit architecture. Therefore, gcc-arm-
: linux will treat long as 32-bit instead of 64-bit. While I guess your Ubuntu
: is 64-bit version, therefore gcc will treat long as 8 bit.

t****t
发帖数: 6806
5
知道是undefined就可以了, 具体错成什么样, 跟ABI有关.

【在 d****n 的大作中提到】
: C99 n1256: 7.19.6.1 第9项:
: "If any argument is not the correct type for the corresponding conversion
: specification, the behavior is undefined"
: 好奇一下,为什么要用“%x“打印一个unsigned long long呢?一般而言,尽量不要在
: C代码里尝试C的这些corner cases。有时候,个人感觉是对的,但是实际上标准里规定
: 是ub,或者在某些很极端的情况下,标准也是有点含糊(或者有矛盾的)的,例如对于
: union的一些操作。。。

d****n
发帖数: 1241
6
我只是很好奇为什么楼主要测试这样的代码:)
对于UB,根据标准教条一点的说,跟ABI没有关系,编译器做任意的事情都是“正确”的

【在 t****t 的大作中提到】
: 知道是undefined就可以了, 具体错成什么样, 跟ABI有关.
i**p
发帖数: 902
7
不是要测试这样的代码,是好奇这几个值是怎么来的。
ullong 1: 0x8c48
ullong 2: 0x8c58
ullong 4: 0x8c79
ullong 5: 0x8c8b

”的

【在 d****n 的大作中提到】
: 我只是很好奇为什么楼主要测试这样的代码:)
: 对于UB,根据标准教条一点的说,跟ABI没有关系,编译器做任意的事情都是“正确”的

t****t
发帖数: 6806
8
不是说了跟ABI有关系么...

【在 i**p 的大作中提到】
: 不是要测试这样的代码,是好奇这几个值是怎么来的。
: ullong 1: 0x8c48
: ullong 2: 0x8c58
: ullong 4: 0x8c79
: ullong 5: 0x8c8b
:
: ”的

i**p
发帖数: 902
9
我是在回答daikon 为什么楼主要测试这样的代码。。。

【在 t****t 的大作中提到】
: 不是说了跟ABI有关系么...
S*A
发帖数: 7142
10
unsigned long long ullong=0x0102030405060708;
这个写法是不太好的,
应该是:
unsigned long long ullong=0x0102030405060708LL;
不然那个长的 constant 有可能被编译器截短。
1 (共1页)
进入Programming版参与讨论
相关主题
func调用结束时出错Help needed on coding for Fibonacci series
数组问题请教一个结构体占内存大小的问题
C的问题,困惑中指针的大小是 4 byte还是有赖于系统?
看下这个小程序问一个defining array 的问题
怎么得到char *分配空间的大小?入门问题,perl里s@\_@@g 是什么意思?
gcc 优化不优化运算结果不一样?gcc 的 bug?little endian vs big endian
一个integer promotion问题free(char *)的问题 (转载)
GCC 居然允许变量长度的向量大家看看这个简单的qsort排序的问题
相关话题的讨论汇总
话题: ullong话题: unsigned话题: long话题: sizeof话题: 0x%