标签: unsigned

C#:无法从ulong转换为byte

奇怪的是我如何在C++中完成它,而不是在C#中.

为了清楚起见,我将两个函数粘贴在C++中,然后粘贴到C#中,并使用注释"// error"标记C#代码中有问题的行.这两个函数的作用是对参数进行编码,然后将其添加到名为byte1seeds的全局变量中.

这些是C++中的函数

//Global var:

unsigned char byte1seeds[3];

unsigned long GenerateValue( unsigned long * Ptr )
{
unsigned long val = *Ptr;
for( int i = 0; i < 32; i++ )
    val = (((((((((((val >> 2)^val) >> 2)^val) >> 1)^val) >> 1)^val) >> 1)^val)&1)|((((val&1) << 31)|(val >> 1))&0xFFFFFFFE);
return ( *Ptr = val );
}

void SetupCountByte( unsigned long seed )
{
if( seed == 0 ) seed = 0x9ABFB3B6;
unsigned long mut = seed;
unsigned long mut1 …
Run Code Online (Sandbox Code Playgroud)

c# unsigned byte long-integer

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

为什么在使用C++的表达式中使用无符号整数时会出错?

给出以下(伪C++)代码:

float x=100, a=0.1;
unsigned int height = 63, width = 63;
unsigned int hw=31;
for (int row=0; row < height; ++row)
{
    for (int col=0; col < width; ++col)
    {
        float foo = x + col - hw + a * (col - hw);
        cout << foo << " ";
    }
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

在(col - hw)为负的地方,foo的值被拧紧了一半的数组.我想因为col是int而且是第一个,表达式的这一部分转换为int并变为负数.不幸的是,显然它没有,我得到一个无符号值的溢出,我不知道为什么.

我该如何解决这个问题?使用强制转换表达整个或部分表达式?什么类型的演员表(C风格或static_cast <...>)?使用演员阵容是否有任何开销(我需要这个快速工作!)?

编辑:我将所有未签名的int更改为常规int,但我仍然想知道为什么在这种情况下我有溢出.

c++ unsigned expression

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

如何在Java中避免使用符号扩展位掩码?

我的位掩码是字节,我想保持它们的原样,但我认为它们是符号扩展的.我不在乎字节被认为是正数还是负数,只要它具有相同的位设置即可.我只花了几个小时调试我的代码,然后我发现我的字节位掩码只是在它们碰巧是负面的时候有问题,需要一段时间才能找到答案.我不可能是唯一一个遇到此问题的人.有没有办法让字节表现得好像是无符号的?

java unsigned signed bitmask

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

value vs type:确定变量是否签名的代码

我在一个论坛上遇到过这个问题.答案是这样的:

#define ISUNSIGNED(a) (a >= 0 && ~a >= 0) 

//Alternatively, assuming the argument is to be a type, one answer would use type casts: 

#define ISUNSIGNED(type) ((type)0 - 1 > 0)
Run Code Online (Sandbox Code Playgroud)

我对此有几个问题.为什么我们需要检查~a >= 0?第二个解决方案是什么?我不明白这句话:"论证是一种类型".更重要的是,作者指出,首先#define不适用于ANSI C(但在K&R C中可以使用).为什么不?

c unsigned signed

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

在Java中将Signed Int转换为Unsigned String值

为了简短起见,我得到一个带符号的数字,-25771(在Java中),我需要无符号字符串表示,即"4294941525".Java认为这个数字是二进制补码,但我需要它的无符号值.

我注意到整数的toString()方法的Javadoc只转换为带符号的表示.

是否有一个按位操作,如"&0xFF",我可以做到无符号数?

java binary unsigned signed representation

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

将无符号类型的按位运算符迁移到java(没有无符号类型)

我正在将iOS应用迁移到Android.

这个iOs应用程序使用类似uint32_t的类型.这是一个unsigned int 32,它在Java上不可用.

uint32_t range is 0 to 4,294,967,295.

int32_t can hold values from –2,147,483,648 to 2,147,483,647
Run Code Online (Sandbox Code Playgroud)

我在Objective-C中有这个代码:

uint32_t vectorRxV1;
UInt16   xxsDas;

[ ... ]

UInt8 CM_L = (vectorRxV1 & 0xBB000000) >> 24;
Run Code Online (Sandbox Code Playgroud)

并且:

uint32_t vectorTxV0 += ((vectorTxV1<<4) + VectorSelK0) ^ ((vectorTxV1>>5) + VectorSelK1);
Run Code Online (Sandbox Code Playgroud)

并且:

Uint8 sincroRx = (sincroRx & 0xD9);
sincroRx = (sincroRx | 0xA2);
Run Code Online (Sandbox Code Playgroud)

我不确定我是否使用long代替uint32_t(或int代替UInt8上面的代码将给出不同的值.

UPDATE

我有这些运营商:>>,<<,&,^|.

你怎么看?

c java android unsigned bitwise-operators

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

C++:double vs unsigned int.为什么会像这样运行?

我试着乘以三个数字,但我得到一个奇怪的结果.为什么我得到如此不同的结果?

unsigned int a = 7;
unsigned int b = 8;
double d1 = -2 * a * b;
double d2 = -2 * (double) a * (double) b;
double d3 = -2 * ( a * b );

// outputs:
// d1 = 4294967184.000000
// d2 = -112.000000
// d3 = 4294967184.000000
Run Code Online (Sandbox Code Playgroud)

c++ double int unsigned

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

安全地将int转换为C中的字符串

根据关于SO最佳答案,我应该做的是将整数转换为C中的字符串:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#include <math.h>

#define digits(x) ((int)((ceil(log10(abs(x)))+1)*sizeof(char)))

int main () {
    int a = 345908220;
    long b = 23094809284358;
    unsigned int c = 3456789234;
    uint8_t d = 242;
    int64_t e = -840958202029834;

    int dstr_len = digits(a) + digits(b) + digits(c) +
                   digits(d) + digits(e) + 5;

    char dstr[dstr_len];
    sprintf(dstr, "%d %ld %u %u %" PRIu64, a, b, c, d, e);

    printf("%s\n", dstr);

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

然而,这似乎是非常低效的.我必须将我的程序链接到libmath,并为我要打印的每个整数进行三次数学调用.另外请注意,我不得不添加5 …

c string unsigned string-formatting

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

如何生成app-androidTest-unaligned.apk

今天下午我更新了我的sdk,然后像往常一样运行我的应用程序,我收到了这样的错误.

${dir}\[appname]-debug-androidTest-unaligned.apk 在磁盘上不存在

我尝试构建和清理项目,但没有用.我使用android-studio.

sdk android unsigned signed android-studio

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

c中的unsigned int comparision

int main()
{
    unsigned int c = -1;
    char *s = "Abc";
    char *x = "defhe";
    ((strlen(s)-strlen(x))>c)? printf(s): printf(x);
}
Run Code Online (Sandbox Code Playgroud)

的值c就是4294967295和的值(strlen(s)-strlen(x))4294967294应打印x,但在打印的S value.I上午没有得到为什么它是这样的

c unsigned implicit-conversion

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