标签: signed

为什么std :: abs返回签名类型

当我比较一个std::abs(int)和一个时,我正在收到有关签名与无签名比较的警告unsigned.事实上,std::abs返回签署的值.为什么选择这个?它将解决负值的问题,其绝对值不能用有符号的类型表示.

然后,是否有比这更清洁(即没有演员表)的东西以避免警告?

#include <cassert>
#include <cstdlib>

// max(1, lhs + rhs). (lhs must be > 0)
unsigned add(unsigned lhs, int rhs)
{
  return
    (0 < rhs || static_cast<unsigned>(-rhs) < lhs
     ? rhs + lhs
     : 1);
}

int main()
{
  assert(add(42, -41) == 1);
  assert(add(42, 0) == 43);
  assert(add(42, 1) == 43);
  assert(add(42, -51) == 1);
}
Run Code Online (Sandbox Code Playgroud)

c++ unsigned signed gcc-warning

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

为什么(18446744073709551615 == -1)是真的?

当我在工作时,string::npos我注意到了一些东西,我在网上找不到任何解释.

(string::npos == ULONG_MAX)
Run Code Online (Sandbox Code Playgroud)

(string::npos == -1)
Run Code Online (Sandbox Code Playgroud)

是真的.

所以我尝试了这个:

(18446744073709551615 == -1)
Run Code Online (Sandbox Code Playgroud)

这也是事实.

怎么可能?是因为二元对话吗?

c++ unsigned signed equality integer-overflow

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

在Perl中将字符串中的十六进制数转换为负数

我有一堆数字表示为日志文件中的十六进制字符串,由Perl脚本解析,而且我对Perl相对缺乏经验.

这些数字中的一些实际上是带符号的负数,即0xFFFE == -2表示为16位有符号整数时.

有人可以告诉我从FFFEPerl中的字符串中获取此数字的签名表示的规范方法,或以其他方式指向我的教程或其他资源吗?

perl parsing signed numbers

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


C++如何将两个带符号的8位数组合成16位短数?无法解释的结果

我需要将两个带符号的8位_int8值组合成一个有符号的短(16位)值.重要的是标志不会丢失.

我的代码是:

 unsigned short lsb = -13;
 unsigned short msb = 1;
 short combined = (msb << 8 )| lsb;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是-13.但是,我预计它会是499.

对于以下示例,我使用相同的代码获得正确的结果:

msb = -1; lsb = -6; 合并= -6;

msb = 1; lsb = 89; 合计= 345;

msb = -1; lsb = 13; 合计= -243;

但是,msb = 1; lsb = -84; 合并= -84; 在哪里我期待428.

似乎如果lsb为负且msb为正,则出现问题!我的代码出了什么问题?计算机如何得到这些意外结果(Win7,64位和VS2008 C++)?非常感谢您的帮助!

c++ signed byte short

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

如何在Perl中进行64位运算?

我是一个perl新手,

我可以在Perl中简单地使用64位算术吗?

例如

$operand1 = 0xFFFFFFFFFFFF;   # 48 bit value
$operand2 = 0xFFFFFFFFFFFF;   # 48 bit value

$Result = $operand1 * $operand2;
Run Code Online (Sandbox Code Playgroud)
  • 我基本上是在寻找perl中int64_t的替代品.
  • 有没有办法提及,如果变量是签名还是未签名?

perl 64-bit signed

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

计算机如何区分整数是签名还是未签名?

两个补码被设置为使计算机更容易计算两个数的减法.但计算机如何区分整数是有符号整数还是无符号整数?它的内存只有0和1.

例如, 1111 1111在计算机中,存储器可以表示数字255,但也可以表示-1.

storage unsigned signed

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

将原始14位二进制补码转换为有符号16位整数

我在嵌入式C中做了一些工作,加速度计将数据作为14位2的补码数返回.我将这个结果直接存储到一个uint16_t.稍后在我的代码中,我试图将这个"原始"形式的数据转换为有符号整数,以表示/使用我的其余代码.

我无法让编译器了解我想要做什么.在下面的代码中,我正在检查第14位是否已设置(意味着数字为负),然后我想反转这些位并加1以获得数字的大小.

int16_t fxls8471qr1_convert_raw_accel_to_mag(uint16_t raw, enum fxls8471qr1_fs_range range) {
  int16_t raw_signed;
  if(raw & _14BIT_SIGN_MASK) {
    // Convert 14 bit 2's complement to 16 bit 2's complement
    raw |= (1 << 15) | (1 << 14); // 2's complement extension
    raw_signed = -(~raw + 1);
  }
  else {
    raw_signed = raw;
  }
  uint16_t divisor;
  if(range == FXLS8471QR1_FS_RANGE_2G) {
    divisor = FS_DIV_2G;
  }
  else if(range == FXLS8471QR1_FS_RANGE_4G) {
    divisor = FS_DIV_4G;
  }
  else {
    divisor = FS_DIV_8G;
  }

  return ((int32_t)raw_signed …
Run Code Online (Sandbox Code Playgroud)

c embedded signed avr

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

Amazon AWS S3通过Wget签名URL

我可以在我的帐户中为存储桶创建一个Amazon S3签名URL,我可以通过Amazon AWS CLI下载并上传该存储桶.

我创建了Amazon S3 URL,如下所示:

from boto.s3.connection import S3Connection
key = os.environ['aws_access_key_id']
secret = os.environ['aws_secret_access_key']
c = S3Connection(key,secret,is_secure=False)
bucket = c.get_bucket('my-bucket')
bktkey = bucket.get_key('stuff.tar.gz')
seconds=60*60*12
url2 = bktkey.generate_url(expires_in=seconds)
print '%s' %url2
Run Code Online (Sandbox Code Playgroud)

url2在Chrome中使用并复制粘贴它,我下载了stuff.tar.gz.

但是当我像这样使用Wget时

wget <whatever is in url2>
Run Code Online (Sandbox Code Playgroud)

我得到以下异常,

HTTP request sent, awaiting response... 403 Forbidden
2015-12-04 20:48:57 ERROR 403: Forbidden.
Run Code Online (Sandbox Code Playgroud)

为什么Wget在Chrome和Firefox使用签名的Amazon S3 URL成功下载的地方失败了?

signed amazon-s3

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

将无符号字节转换为有符号字节

有没有一种简单而优雅的方法可以将无符号字节值转换为java中的有符号字节值?例如,如果我只有int值240(二进制(24位+ 11110000)= 32位),我怎样才能得到这个int的有符号值?

java unsigned signed byte

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