标签: unsigned

共识?MySQL,签名VS无符号主/外键

关于已签名和未签名的键值,我已经看到了一些关于每个人现在正在做什么的线索.似乎无符号是最佳的,因为它允许相同成本的两倍数量的行.签名密钥有什么好处吗?

有没有标准的共识?似乎签名是答案,因为"它一直是这样"

mysql unsigned signed integer primary-key

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

使用size_t的负整数是否安全?

我刚看到一些像这样的C++代码.它正在使用一个条件来决定是向前还是向后走std::vector.编译器没有抱怨,但我认为size_t是无符号的.这有危险吗?

vector<int> v { 1,2,3,4,5 };    
bool rev = true;

size_t start, end, di;
if (rev) {
    start = v.size()-1;
    end = -1;
    di = -1;
}
else {
    start = 0;
    end = v.size();
    di = 1;
}

for (auto i=start; i!=end; i+=di) {
    cout << v[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ unsigned size-t c++11

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

C(输出)中的无符号和有符号值

signed int x = -5;
unsigned int y = x;
Run Code Online (Sandbox Code Playgroud)

有什么价值y?这是怎么回事?

c unsigned signed

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

unsigned在if语句比较中签名?

我在这个网站上搜索了一个答案,发现许多对未签名/签名比较的回复,但是这个问题是只比较了无符号参数,但它仍然很有趣.

以下代码的问题在于第一个if-statment不会发生("hello"),而第二个("world")就是这样.我已经解释为在if-statment 内部进行的计算会生成一个负数但是保存到变量的结果完全相同的计算不会(即使结果被保存到有符号变量).

使用的编译器是gcc 4.4.

unsigned short u16_varHigh;  
unsigned short u16_varLow;  
unsigned short u16_Res1;  
signed short   s16_Res1;  

u16_varHigh = 0xFFFF;  
u16_varLow = 10;

u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected  
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected

// Does not enter  
if( (u16_varLow - u16_varHigh) > (unsigned short)5 )  
{  
 printf( "hello" );  
}

// Does enter  
if( (unsigned short)(u16_varLow - u16_varHigh) > 5 )  
{  
 printf( "world" …
Run Code Online (Sandbox Code Playgroud)

c comparison unsigned if-statement

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

无符号长位移位

我有位移和无符号长的问题.这是我的测试代码:

char header[4];
header[0] = 0x80;
header[1] = 0x00;
header[2] = 0x00;
header[3] = 0x00;

unsigned long l1 = 0x80000000UL;
unsigned long l2 = ((unsigned long) header[0] << 24) + ((unsigned long) header[1] << 16) + ((unsigned long) header[2] << 8) + (unsigned long) header[3];

cout << l1 << endl;
cout << l2 << endl;
Run Code Online (Sandbox Code Playgroud)

我希望l2也有2147483648的值,但它打印18446744071562067968.我假设第一个字节的位移会导致问题?

希望有人可以解释为什么这会失败以及我如何修改l2的计算以便它返回正确的值.

提前致谢.

c++ unsigned long-integer

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

"有符号和无符号整数表达式之间的比较"实际上是否会导致错误?

通常我使用的对象将具有(签名的)int参数(例如int iSize),这些参数最终存储了应该有多大的东西.同时,我经常将它们初始化-1为表示对象(等)尚未设置/尚未填充/尚未准备好使用.

comparison between signed and unsigned integer当我做类似的事情时,我常常会收到警告if( iSize >= someVector.size() ) { ... }.

因此,我名义上不想使用unsigned int.是否存在导致错误或意外行为的情况?

如果不是:处理这个问题的最佳方法是什么?如果我使用编译器标志,-Wno-sign-compare我可以(假设)错过我应该使用unsigned int(或类似的东西)的情况.那么在与unsigned int--eg 比较时我应该使用一个演员if( iSize >= (int)someVector.size() ) { ... }吗?

c++ int comparison unsigned warnings

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

unsigned关键字是否会影响sizeof的结果?

C和C++是否保证类型的无符号等价物具有相同的大小?

例:

size_t size = sizeof(unsigned int);
Run Code Online (Sandbox Code Playgroud)

unsigned这里完全实际意义?

c c++ unsigned sizeof

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

为什么imul用于乘以无符号数?

我编译了以下程序:

#include <stdint.h>

uint64_t usquare(uint32_t x) {
  return (uint64_t)x * (uint64_t)x;
}
Run Code Online (Sandbox Code Playgroud)

这拆解为:

 0: 89 f8                   mov    eax,edi
 2: 48 0f af c0             imul   rax,rax
 6: c3                      ret  
Run Code Online (Sandbox Code Playgroud)

但是imul用于乘以有符号数字的指令.那为什么用gcc呢?

/ edit:使用uint64_t程序集时类似:

0:  48 0f af ff             imul   rdi,rdi
4:  48 89 f8                mov    rax,rdi
7:  c3                      ret  
Run Code Online (Sandbox Code Playgroud)

x86 assembly unsigned x86-64 multiplication

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

为什么在C语言中每个有符号的int类型都必须有相应的unsigned int类型?

我在Nutshell中读C并发现:

"如果定义了可选的带符号类型(没有前缀u),则需要相应的无符号类型(带有初始u),反之亦然."

该段落是关于具有精确宽度(C99)的整数类型.

c unsigned signed c99 stdint

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

在C中使用unsigned int有什么意义?

我认为unsigned int只能存储整数> = 0.但是我尝试将一个负数赋给unsigned int,没有什么特别的事情发生.它似乎存储了没有问题的值.

那么signed和unsigned int之间有什么区别,如果它可以存储任何值,那又有什么意义呢?

c int unsigned signed

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