Tag: 整数

使用atoi()输入Integer的validation

#include “stdafx.h” #include void main() { char buffer[20]; int num; printf(“Please enter a number\n”); fgets(buffer, 20, stdin); num = atoi(buffer); if(num == ‘\0’) { printf(“Error Message!”); } else { printf(“\n\nThe number entered is %d”, num); } getchar(); } 上面的代码接受一个字符串forms的数字,并使用atoi将其转换为整数。 如果用户输入十进制数,则只接受小数点前的位。 此外,如果用户输入字母,则返回0。 现在,我有两个问题: i)我希望程序检测用户是否输入了带小数点的数字并输出错误信息。 我不希望它在小数点之前取得部分。 我希望它能够识别输入无效。 ii)如果atoi返回0以防有字母,我怎么validation它,因为用户也可以输入数字0? 谢谢。

C和C ++标准对位级整数表示和操作有何看法?

我知道C和C ++标准没有规定数字的特定表示(可以是二进制补码,符号和数量等)。 但我不清楚这些标准(并且无法确定是否已经说明)知道在使用位时是否存在任何特定的限制/保证/保留表示。 尤其: 如果整数类型中的所有位都为零,那么整数整数是否代表零? 如果整数类型中的任何位是1,整数整数是否表示非零? (如果这是“是”,则会对符号和幅度等一些表示进行额外限制) 是否有保证的方法来检查是否有任何位未设置? 是否有保证的方法来检查是否设置了任何位? (#3和#4类型依赖于#1和#2,因为我知道如何设置,例如某些变量x的第5位(参见#5),我想检查变量y以查看如果它的第5位为1,我想知道if if (x & y)是否有效(因为据我所知,这取决于表示的值而不是该位是否实际为1或0)) 是否有保证的方法来设置最左边和/或最右边的位? (至少比一个char c更简单的方法是所有位都为真(由c = c | ~c )并且做c = c << (CHAR_BIT – 1)来设置高位和c = c ^ (c << 1)对于低位,假设我不做任何假设,我不应该,鉴于这些问题) 如果#1的答案是“否”,那么如何迭代整数类型的位并检查每个位是1还是0? 我想我的整体问题是:C和C ++标准是否有关于位和整数的限制/保证/保留表示,尽管事实上没有规定整数的表示(如果C和C ++标准在这方面不同) ,他们的区别是什么?) 我在做作业时提出了这些问题,这需要我做一些操作(注意这些不是我作业的问题,这些都是“抽象的”)。 编辑:关于我所说的“位”,我的意思是“值形成”位而不包括“填充”位。

32位有符号整数乘法,不使用64位数据类型

我想在不使用64位数据类型的情况下进行32位有符号整数乘法。 我的输入是Q1.31(两种)格式。 input1 = A32 (Ah Al) – higher, lower half’s of A32 input2 = B32 (Bh Bl) – higher, lower half’s of B32 结果应为Q1.31格式,保留溢出情况。 我需要C代码。 请提供格式说明。

为什么整数提升的结果不同?

请看我的测试代码: #include #include #define PRINT_COMPARE_RESULT(a, b) \ if (a > b) { \ printf( #a ” > ” #b “\n”); \ } \ else if (a < b) { \ printf( #a " < " #b "\n"); \ } \ else { \ printf( #a " = " #b "\n" ); \ } int main() […]

sizeof(int)== sizeof(void *)?

是否存在与指针大小相同的整数类型? 所有微体系结构都保证?

C通常的算术转换

我正在阅读关于通常算术转换的C99标准。 如果两个操作数具有相同的类型,则不需要进一步转换。 否则,如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数将转换为具有更高等级的操作数的类型。 否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的等级,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型。 否则,如果带有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数将转换为带有符号整数类型的操作数的类型。 否则,两个操作数都转换为无符号整数类型,对应于带有符号整数类型的操作数的类型。 所以我要说我有以下代码: #include int main() { unsigned int a = 10; signed int b = -5; printf(“%d\n”, a + b); /* 5 */ printf(“%u\n”, a + b); /* 5 */ return 0; } 我认为粗体段落适用(因为unsigned int和signed int具有相同的等级。为什么不将b转换为unsigned ?或者它可能转换为unsigned但是有些东西我不明白? 感谢您的时间 :-)

C中是否有任何可靠的大整数实现?

我正在开发一个项目,我需要以绝对精度和尽可能快的速度处理大整数(如3 ^ 361)。 C是我熟悉的最快的语言,所以我试图用这种语言编写我的解决方案。 问题是我无法找到任何数据类型的良好实现来表示C语言中除Python的源代码之外的无限整数。 我花了一些时间来完成代码并确定我需要什么。 我宁愿使用其他人的测试代码,其中包含一整套function(加法,减法,乘法,除法,调制,求幂,等式检查……甚至按位运算都会很好),而不是花费几周时间才能让我连开始让我自己的版本达到标准杆。 虽然这将是一个很好的学习经历,但它不是我的问题的焦点,我宁愿到达我感兴趣的部分:)

如何将变量设置为C中可能的最大数量?

如何在C中将变量设置为等于无穷大(或任何保证的最大数值)?

在C中生成INTEGERS的均匀分布

我编写了一个C函数,我认为从范围[rangeLow,rangeHigh](包括范围)的均匀分布中选择整数 。 这不是家庭作业 – 我只是在一些嵌入式系统中使用它来修补我正在做的事情。 在我的测试用例中,此代码似乎产生了适当的分布。 但是,我并不完全相信实施是正确的。 如果我在这里做错了什么,有人可以做一次健全检查并让我知道吗? //uniform_distribution returns an INTEGER in [rangeLow, rangeHigh], inclusive. int uniform_distribution(int rangeLow, int rangeHigh) { int myRand = (int)rand(); int range = rangeHigh – rangeLow + 1; //+1 makes it [rangeLow, rangeHigh], inclusive. int myRand_scaled = (myRand % range) + rangeLow; return myRand_scaled; } //note: make sure rand() […]

为什么248×248是我可以声明的最大二维数组大小?

我有一个程序问题,我想在C中声明一个256×256数组。不幸的是,我每次尝试声明一个大小的数组(整数)并运行我的程序时,它意外终止。 有什么建议? 我没有尝试过内存分配,因为我似乎无法理解它如何与多维数组一起工作(尽管我是C的新手,随时引导我完成它)。 另一个有趣的事情是我可以在C中声​​明一个248x248arrays没有任何问题,但没有更大的问题。 dims = 256; int majormatrix[dims][dims]; 编译: gcc -msse2 -O3 -march=pentium4 -malign-double -funroll-loops -pipe -fomit-frame-pointer -W -Wall -o “SkyFall.exe” “SkyFall.c” 我正在使用SciTE 323(不知道如何检查GCC版本)。