小编vxs*_*122的帖子

为什么-1 >> 1和0xFFFFFFFF >> 1产生不同的结果?

我正在尝试进行测试,以判断我的PC是通过右移十六进制FFFFFFFF来执行算术或逻辑右移1.

我知道整数-1读取为FFFFFFFF十六进制,因为它是二进制的补码1.-1通过1结果右移FFFFFFFF并显示PC执行算术右移.

但是,如果我只是输入0xFFFFFFFF >> 1,它会导致7FFFFFFF并显示PC执行逻辑右移.为什么会这样?请参阅以下产生结果的代码:

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

int main ( int argc, char *argv[] )
{
    printf ( "%x >> 1 = %x\n", -1, -1 >> 1 );
    printf ( "%x >> 1 = %x\n", 0xffffffff, 0xffffffff >> 1 );

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出是:

ffffffff >> 1 = ffffffff
ffffffff >> 1 = 7fffffff
Run Code Online (Sandbox Code Playgroud)

c bit-shift bitwise-operators

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

C:随机游走(布朗运动)程序不返回预期的理论值.为什么?

这只是基于"Feynman物理学讲座"第6-3节的实验:

在最简单的版本中,我们想象一个"游戏",其中"玩家"从点x = 0开始,并且在每次"移动"时需要向前(向+ x)或向后(向-x)迈出一步.选择是随机进行的,例如通过掷硬币来确定.

资料来源:http://www.feynmanlectures.caltech.edu/I_06.html#Ch6-S3

我的目标是计算距离说明点的预期距离.所以,我想每一步都等于一个距离单位.我写了一个简单的C程序来模拟30个随机步骤,然后计算起点的最终距离.重复一百万次,程序平均距离以获得预期距离.

理论上,预期距离应该是步数的平方根.那应该是sqrt(30)= 5.48.

但是,该程序运行几次并保持返回接近4.33的值(更确切地说,4.33461,4.33453和4.34045).为什么它甚至不接近理论值约5.48?

这是我的代码:

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

int main ( int argc, char *argv[] )
{

  int number_of_steps = 30;
  int repetition = 1000000;
  int distance = 0;
  int total_distance = 0;
  double expected_distance;
  int i, j;

  srand(time(NULL));

  for ( i = 0; i < repetition; i++ ) {

    for ( j = 0; j < number_of_steps; j++) {
      distance += rand() & 1 ? -1 : …
Run Code Online (Sandbox Code Playgroud)

c random probability

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

如何将货币字符串转换为数值?

有没有办法将货币字符串转换为浮动值,例如:

$1,138.15
$ 29.10
$2,195.34
Run Code Online (Sandbox Code Playgroud)

应转换为:

1138.15
29.10
2195.34
Run Code Online (Sandbox Code Playgroud)

某些货币字符串在美元符号和美元价值之间有空格.

我这样做是因为我从PDF中提取成本值(转换为txt文件)并对它们进行算术运算.例如,文本文件的一部分如下所示:

Fixed Power

$1,138.15

General Admin Surcharge

$ 29.10

Customer Charge

$2,195.34
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

$sourceFile = Get-Content $sourcePath\$($filenames[0]).txt

$fixedPower = $sourceFile[(
    Select-String `
        -Path $sourcePath\$($filenames[0]).txt `
        -Pattern "Fixed Power" `
        -List
).LineNumber + 1]

$generalAdminSurcharge = $sourceFile[(
    Select-String `
        -Path $sourcePath\$($filenames[0]).txt `
        -Pattern "General Admin Surcharge" `
        -List
).LineNumber + 1]

$customerCharge = $sourceFile[(
    Select-String `
        -Path $sourcePath\$($filenames[0]).txt `
        -Pattern "Customer Charge" `
        -List
).LineNumber + 1]
Run Code Online (Sandbox Code Playgroud)

但那些只将成本提取到字符串值中.

string powershell currency

5
推荐指数
2
解决办法
3349
查看次数

C指针:*ptr vs&ptr vs ptr

假设*ptr指向一个变量.这是什么*ptr,&ptr以及ptr各是什么意思?

很多时候,我对它们感到困惑.有人介意澄清这些陈述并给出一些具体的例子吗?

c pointers

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

在 Powershell 中打印所有 16 位二进制数的最快算法?

PowerShell 应该打印所有带有前导零的 16 位二进制数,如下所示:

0000000000000000
0000000000000001
0000000000000010
0000000000000011
...
1111111111111100
1111111111111101
1111111111111110
1111111111111111
Run Code Online (Sandbox Code Playgroud)

我当前的代码如下所示:

0 .. 65535 | % { "{0:D16}" -f [int64][convert]::ToString($_,2) }
Run Code Online (Sandbox Code Playgroud)

但我想知道是否还有其他算法可以更快地执行任务。

algorithm binary powershell optimization

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

生成并解决没有边界的迷宫?

好吧,假设你试图穿过迷宫的"北边",你会回到同一个迷宫,但在"南边".有点喜欢在迷宫球体中航行.

是否有可能生成并解决这样的迷宫?我还没有找到关于这个主题的文件......

algorithm maze

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

为什么那些打印出相同的结果?

鉴于声明:

char message[] = "hello, world"
Run Code Online (Sandbox Code Playgroud)

为什么那些打印出相同的结果?

printf ( "%s", message );
printf ( "%s", &message[0] );
Run Code Online (Sandbox Code Playgroud)

我所知道的是,%s只读取字符串的第一个地址.char message[]也被声明为char strings(char *message)的指针,并且message只读取字符串的第一个地址.但是,对于message[0],也被读作*(message + 0)并且我纠正它是这样的吗?

&message[0]= &*(message + 0)= &*message=message

c string pointers

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

为什么这个C代码输出的数据产生一个有趣的波状直方图?

假设我从这里使用dictionary.txt(单词词典),这个C代码产生如下数据:

#include <stdio.h>

int main ( void )
{
   FILE *dictionary = fopen ( "dictionary.txt", "r" );

   char entry[46];
   unsigned value = 0;

   while ( fscanf ( dictionary, "%s", entry ) != EOF ) {
      for ( int i = 0; entry[i]; ++i )
         value += entry[i];
      printf ( "%d"\n", value );
      value = 0;
   }

   fclose ( dictionary );

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码的作用是,对于字典中的每个单词,它产生一个值,该值是每个字母的所有ASCII值的总和.

编译之后,我创建了一个收集终端上所有值的data.txt:

$ ./dictionary > data.txt
Run Code Online (Sandbox Code Playgroud)

在MATLAB上:

fileID = fopen ( 'data.txt', 'r' );
formatSpec …
Run Code Online (Sandbox Code Playgroud)

c matlab histogram

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

Lisp:为什么( - 1e16 1)产生10000000000000000而不是9999999999999999?

或者更确切地说,为什么(= 1e16 (- 1e16 1))返回真实?我怎样才能收到更准确的答案?

lisp floating-point scheme

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

在 Java 中,是否有一种简单的方法可以生成随机 N 位,但要确保所有 N 位中至少有一位等于 1?

至于 N,它可以大到 179。

例如,我能够为 n 最多 32 位执行此操作:

new Random().nextInt(2^n-1)+1
Run Code Online (Sandbox Code Playgroud)

nextLong() 是不可能的,因为我不能向它传递一个值,它只能生成一个高达 48 位的随机值。

java random

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