小编mk_*_*mk_的帖子

浮点类型的有效位数

floatC中的类型描述提到有效位数是6.然而,

float f = 12345.6;
Run Code Online (Sandbox Code Playgroud)

然后使用printf()打印12345.6它不打印,它打印12345.599609.那么double对于浮点类型来说,"6位有效数字"(或者"a "表示"15 ")是什么意思?

c floating-point floating-point-conversion

9
推荐指数
3
解决办法
2万
查看次数

x86上linux的段定义

Linux 3.4.6在arch/x86/include/asm/segment.h中定义了以下宏.任何人都可以解释为什么__USER宏将3添加到已定义的常量以及为什么不对__KERNEL宏执行此操作?

#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS*8)
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS*8)
#define __USER_DS   (GDT_ENTRY_DEFAULT_USER_DS*8+3)
#define __USER_CS   (GDT_ENTRY_DEFAULT_USER_CS*8+3)
Run Code Online (Sandbox Code Playgroud)

x86 linux-kernel

5
推荐指数
1
解决办法
448
查看次数

Linux内核中的_THIS_IP_宏

以下宏出现在 include/linux/kernel.h 中

#define _THIS_IP_  ({ __label__ __here; __here: (unsigned long)&&__here; })
Run Code Online (Sandbox Code Playgroud)

我不明白第二个 & 应用于 __here 会做什么。第一个获取本地标签的地址,但是第二个呢?

c linux-kernel

4
推荐指数
1
解决办法
825
查看次数

rand()行为不明白

我有一个简单的程序在C中生成N对随机数.

我正在使用rand()这个.N的值是命令行参数.

我注意到,当传递的命令行arg相同时,它总是生成相同的数字流.

rand()联机帮助页说如果没有明确的种子,RNG将被隐含地按值1播种(srand()在我的程序中没有调用).

然而,当我用arg = 10然后用arg = 12调用我的程序时,我应该看到两个序列的前10位数相等,对吧?(他们将使用相同的种子,即1).这不会发生.看起来种子是从隐式传递的arg派生和应用的,但这似乎不太可能.有任何想法吗?

更新: [抱歉没有提前发布]

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])  
{  
    int objs=100, i;  
    if (argc >= 2)  
        objs = atoi(argv[1]);

     for(i=0; i<objs; i++){
         int p = rand() % objs;
         int q = rand() % objs;
         printf("%d %d\n", p, q);
      }
      return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用的是Ubuntu 12和gcc 4.7.2.

c random

1
推荐指数
1
解决办法
208
查看次数