标签: unsigned

在Haskell中使用自然数是否有实用的方法?

我正在学习Haskell,并希望在一些构造函数中强制使用正整数(1,2,3,...),但我似乎只能找到'Int'和'Integer'数据类型.

我可以使用规范

data Nat = Zero | Succ Nat
Run Code Online (Sandbox Code Playgroud)

但后来我不能用1,4,......来表示它们.

所以我问,有没有办法实现这个目标?(就像在C中使用'unsigned')

提前致谢.

编辑:正如CA McCann所解释的那样,我将把它隐藏在一个模块中.另外,我必须添加以下链接: http: //haskell.org/haskellwiki/Smart_constructors以获取有关该主题的摘要.感谢您抽出宝贵时间回答!

unsigned haskell types integer

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

如何在python中获取long的有符号整数值?

如果lv存储一个long值,并且机器是32位,则代码如下:

iv = int(lv & 0xffffffff)
Run Code Online (Sandbox Code Playgroud)

结果是类型为long的iv,而不是机器的int.

在这种情况下如何获得(带符号)int值?

python unsigned signed

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

比较char和unsigned char时如何启用编译器警告?

以下面的C代码为例:

int main(int argc, char *argv[])
{
    signed char i;
    unsigned char count = 0xFF;

    for (i=0; i<count;i++)
    {
        printf("%x\n", i);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码在无限循环中运行,即使我按如下方式编译它:

# gcc -Wall -Wpedantic -Wconversion -Wsign-compare -Wtype-limits -Wsign-conversion test.c -o test
Run Code Online (Sandbox Code Playgroud)

有人知道应该警告这些问题的编译器标志吗?

为了清楚起见,我不是在问'为什么会得到一个无限循环',而是要知道是否有办法使用编译器或静态分析来阻止它?

c unsigned signed gcc compiler-warnings

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

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

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

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

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

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

c# c++ unsigned signed

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

Windows上未签名的__int64的printf格式

我需要打印一个ULONGLONG值(unsigned __int64).我应该使用什么格式printf?我%llu在另一个问题中找到了,但他们说它只适用于linux.

谢谢你的帮助.

c c++ windows printf unsigned

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

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

负数在内存中存储为2的补码,CPU如何知道它是负数还是正数?

-1可以用4位二进制表示为(2的补码)1111

图15也表示为1111.

那么,当CPU从内存中获取值时,CPU如何区分15和-1?

binary unsigned sign numeric microprocessors

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

为什么char的符号没有在C中定义?

C标准规定:

ISO/IEC 9899:1999,6.2.5.15(第49页)

char,signed char和unsigned char这三种类型统称为字符类型.实现应将char定义为具有与signed char或unsigned char相同的范围,表示和行为.

确实gcc根据目标平台定义.

我的问题是,为什么标准会这样做?除了可怕的和难以发现的错误之外,我看不出任何可能来自模糊类型定义的内容.

更重要的是,在ANSI C(C99之前)中,唯一的字节大小类型是char,因此使用char进行数学运算有时是不可避免的.所以说"一个人永远不应该使用char来表示数学"并非如此.如果是这样的话,一个理智的决定是包括三种类型" ,".charubytesbyte

有没有理由,或者它只是一些奇怪的向后兼容性问题,以便将坏(但常见)编译器定义为标准兼容?

c standards unsigned gcc char

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

如果我们在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
查看次数

关于unsigned int的建议(江南风格版)

视频"江南风格"(我相信你已经听过)在youtube上的视图超过了20亿.事实上,谷歌表示,他们从未预料到视频会超过32位整数......这暗示谷歌使用的是视频 int 而不是unsigned视频.我认为他们必须重新编写代码以适应更大的视图.

检查他们的风格指南:https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Integer_Types

......他们建议"不要使用无符号整数类型",并给出一个很好的理由:unsigned可能是错误的.

这是一个很好的理由,但可以防范.我的问题是:一般来说编码练习是不是很糟糕unsigned int

c++ int unsigned styles 32-bit

20
推荐指数
4
解决办法
3559
查看次数