标签: signed

长度/计数的有符号与无符号整数

为了表示长度或计数变量,使用有符号无符号整数是否更好?

在我看来,C++ STL往往更喜欢无符号(std::size_t就像在std :: vector :: size()中一样,而C#BCL往往更喜欢有符号整数(比如在ICollection.Count中).

考虑到长度或计数是非负整数,我的直觉会选择无符号 ; 但我不明白为什么.NET设计者选择了有符号整数.

什么是最好的方法?每个人的利弊是什么?

c# c++ unsigned signed

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

如果我们在C/C++中添加安全签名/无符号比较,它会破坏语言或现有代码吗?

在阅读了有关签名/未签名比较的问题之后(我每隔几天就会说出来):

我想知道为什么我们没有正确的签名无符号比较,而是这个可怕的混乱?从这个小程序中获取输出:

#include <stdio.h>
#define C(T1,T2)\
 {signed   T1 a=-1;\
 unsigned T2 b=1;\
  printf("(signed %5s)%d < (unsigned %5s)%d = %d\n",#T1,(int)a,#T2,(int)b,(a<b));}\

 #define C1(T) printf("%s:%d\n",#T,(int)sizeof(T)); C(T,char);C(T,short);C(T,int);C(T,long);
int main()
{
 C1(char); C1(short); C1(int); C1(long); 
}
Run Code Online (Sandbox Code Playgroud)

用我的标准编译器(gcc,64bit)编译,我得到这个:

char:1
(signed  char)-1 < (unsigned  char)1 = 1
(signed  char)-1 < (unsigned short)1 = 1
(signed  char)-1 < (unsigned   int)1 = 0
(signed  char)-1 < (unsigned  long)1 = 0
short:2
(signed short)-1 < (unsigned  char)1 = 1
(signed short)-1 < (unsigned short)1 = 1
(signed short)-1 < …
Run Code Online (Sandbox Code Playgroud)

c c++ comparison unsigned signed

20
推荐指数
3
解决办法
1038
查看次数

签署一个字符是什么意思?

鉴于有符号和无符号整数使用相同的寄存器等,并且只是不同地解释位模式,而C字符基本上只是8位整数,C中有符号和无符号字符之间的区别是什么?我理解char的签名是实现定义的,我根本无法理解它是如何产生影响的,至少当char用于保存字符串而不是数学时.

c string signed char character-encoding

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

"?:"发生了什么?我不知道返回类型

我认为((1 ? (int)1 : (unsigned int)2) > -1)结果是1(true),但实际上它0在Visual Studio 2017中是(假的).

我认为价值(1 ? (int)1 : (unsigned int)2)应该是(int)1,因为1 ?是真的,而且1 > -1是真的.

我不知道为什么这个表达式的最终结果是错误的.

当我尝试转换时((int)(1 ? (int)1 : (unsigned int)2) > -1),它返回1(true).

signed int test = -1;
signed int si = 1;
unsigned int ui = 2;

printf("%d\n", ((1 ? si : ui) > test));
return 0;
Run Code Online (Sandbox Code Playgroud)

我希望输出是1,但实际输出是0.

c unsigned signed ternary-operator conditional-operator

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

在不支持它的系统中“产生负零”是什么意思?

C17 6.2.6.2/4说:

如果实现不支持负零,则未定义&,|,^,〜,<<和>>运算符的行为,其操作数会产生这样的值。

如果我有一个2的补码系统,则它不支持负零。并且它始终利用二进制数的所有可能组合来表示一个值。因此,无论使用哪种按位运算,都不可能产生负零。那么这段文字是什么意思呢?

我认为这部分是指具有1的补码或带符号幅度的系统,该系统不支持负零,而是使用填充位或陷阱表示。它是否正确?

c signed bitwise-operators twos-complement language-lawyer

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

验证C/C++签名的右移是特定编译器的算术运算?

根据C/C++标准(参见此链接),C和C++中的>>运算符不一定是有符号数的算术移位.由于位向右移位,所以由编译器实现是0(逻辑)还是符号位(算术)移入.

对于为有符号整数实现逻辑右移的编译器,此代码是否会在编译时对ASSERT(fail)起作用?

#define COMPILE_TIME_ASSERT(EXP) \
    typedef int CompileTimeAssertType##__LINE__[(EXP) ? 1 : -1]

#define RIGHT_SHIFT_IS_ARITHMETIC \
    ( (((signed int)-1)>>1) == ((signed int)-1) )

// SHR must be arithmetic to use this code
COMPILE_TIME_ASSERT( RIGHT_SHIFT_IS_ARITHMETIC );
Run Code Online (Sandbox Code Playgroud)

c c++ math signed

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

Android Studio已签名APK未安装

我在Android Studio中并在Build> Generate Signed APK和使用向导下签署APK.一切似乎都很好,并生成.apk文件.

当我将此文件复制到我的设备(Nexus 7或Moto X)时,它将无法安装.我收到"安装失败"消息.

我无法弄清楚到底出了什么问题.我把这个.apk放在谷歌游戏开发者控制台的"alpha测试"下,它被接受了(我正在等待测试人员链接变得活跃,尝试从那里下载/安装).

这里向导的说明(http://developer.android.com/tools/publishing/app-signing.html#studio)在最后阶段的屏幕截图中显示了一个名为"Build Type"的下拉列表,选择为"release" .我在我的Android Studio版本中没有这个.我在这个向导中找不到任何可以指定"发布"版本的东西.

任何人都可以给我的任何帮助将非常感激.谢谢!

android signed release apk android-studio

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

"是否要运行此应用程序"JNLP对话框 - 再次显示对话框的条件

用户正在运行从浏览器启动的JNLP应用程序.JNLP启动的*.jar文件由受信任的CA颁发的证书签名.

启动jar文件时,会向用户询问是否信任签名者(不是CA - CA已经信任).

问题对话框

如果用户说"是",则将签名者的证书添加到信任存储区.

问题是:同一个对话框再次显示的条件是什么?

  • JNLP调用的*.jar文件是否已更改?
  • JNLP本身有变化吗?
  • JNLP的URL是否已更改?

即使在用户最初选中" 不再显示此项 "复选框后,其中哪些(或其他?)将触发对话框显示

java jnlp signed ria java-web-start

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

如何检测分配给size_t的负数?

此声明在g ++ -pedantic -Wall(版本4.6.3)中编译时没有警告:

std::size_t foo = -42;
Run Code Online (Sandbox Code Playgroud)

不太明显的伪造是使用size_t参数声明一个函数,并使用负值调用它.这样的功能可以防止无意中的负面论证(看起来像是无数的庸俗,遵守§4.7/ 2)吗?

答案不完整:

只需将size_t更改为(signed)long就会丢弃size_t的语义和其他优点.

将其更改为ssize_t仅仅是POSIX,而不是标准.

将它改为ptrdiff_t是脆弱的,有时会破坏.

测试巨大的值(高位设置等)是任意的.

c++ signed size-t

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

32位有符号整数的最小值是多少?

32位有符号整数的最小值是什么,恰好是在[本网站]创建帐户的安全性"挑战"问题(编辑:链接现在是恶意软件)(不要判断我只是好奇和无聊).

我以为他们说的是一个典型的32位int,它可以存储大到的数字2,147,483,647.但是,当我尝试-2147483647它时,我说错了.我尝试了几种变体,-2,147,483,647但没有任何作用......

我是否误解了这个问题,或者网站有什么问题吗?

PS我也按照建议尝试了-2,147,483,648

这是一张照片 在此输入图像描述

int signed 32-bit minimum

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