在我的c++程序中,我发现assert()调用abort()的情况类似于下面的代码片段: int a = -1;
unsigned int b = 5;
assert(a < b); 作为一个人类,我可以断定-1绝对小于5,不管一个是整数,另一个是无符号整数。为什么编译器不能? 我已经找到了解决方案,那就是这个断言是无意义的,因为无符号总是正的(我有点忘记了我实际代码中的变量是无符号的),但我只是好奇为什么会发生这种情况。
我想把两个数字相乘,我知道我的数字总是正数,然后:
unsigned int mulPositiveNumbers(unsigned int a ,unsigned int b)
{
assert(a > 0);
assert(b > 0);
return (a*b);
}
现在,我使用assert告诉自己“给定的数字总是正数”。
但是当我运行的时候:
int main()
{
unsigned int res = mulPositiveNumbers(-4,3);
// more stuff goes here
}
即使我使用
我有一条if语句,用于检查一个缩进是否小于数组的末尾。当"i“的值为-1时,这是不起作用的。
NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:@"coucou"];
int i = -1;
// Not working
if (i < ([myArray count] - 1) ){
NSLog(@" first ok ");
}
// Fix
int count = [myArray count] - 1;
if ( i < count
我正在阅读Andrew和BarbaraE.Moo所著的“加速C++”一书,并对第二章中的主要例子提出了一些问题。代码可以概括如下,并且正在使用g++编译而没有警告/错误:
#include <string>
using std::string;
int main()
{
const string greeting = "Hello, world!";
// OK
const int pad = 1;
// KO
// int pad = 1;
// OK
// unsigned int pad = 1;
当我运行下面的程序时,它输出类似109876543210-1-2-3-4-5-6-78-9-10-11-12-和s0 on。为什么会这样呢?无符号整数的概念是什么?
main ()
{
unsigned int i;
for (i = 10; i >= 0; i--)
printf ("%d", i);
}
我的编译器: Dev C++ 5.3.0.3TDM-GCC 4.6.1 64位操作系统: Windows 7,64位
我的C代码:
# include "stdio.h"
# include "string.h"
# define MAX (501)
int main() {
char
text[MAX]="";
int i;
i=0;
printf("%d\n",strlen(text)); /* 0 */
printf("%d\n",
汇编程序的代码如下:
sub$0x22,%eax # %eax = %eax - 22
cmp$0x7,%eax # %eax > 7 then jump *this is where I have trouble*
ja some address # jump if C = 1 or Z = 1
我的目标是不做跳跃。我尝试过%eax = 30,14,28,16,0,22的情况
问:我不明白为什么c=0和z=0和我已经尝试过的所有案例。
当我在for中使用c++循环时,我遇到了一个问题。这不像我想的那样有效。我被卡住了,从下面的简短代码开始:
#include <iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v; //v.size() is 0 now
for(int i=1;i<(v.size()-1);i+=2)
{
cout<<"i think this line will not be show!";
}
r
在我开始使用C#之前,我主要是有C/C++背景的。我在C#中的第一个项目中做的一件事就是创建一个这样的类
class Element{
public uint Size;
public ulong BigThing;
}
然后,我感到羞愧的是,这需要转换:
int x=MyElement.Size;
就像这样
int x=5;
uint total=MyElement.Size+x;
为什么语言设计者决定使有符号和无符号整数类型不能隐式强制转换?为什么在整个.Net库中没有更多地使用无符号类型呢?例如,String.Length永远不能为负,但它是一个带符号的整数。
我是C++的新手,对于下面的代码,我对C++的行为感到困惑:
#include <iostream>
void hello(unsigned int x, unsigned int y){
std::cout<<x<<std::endl;
std::cout<<y<<std::endl;
std::cout<<x+y<<std::endl;
}
int main(){
int a = -1;
int b = 3;
hello(a,b);
return 1
我是C++的新手,实际上我正在学习,在实验部分,然而,在实验时我遇到了cout函数的问题。编译时程序失败。我想知道你们是否可以帮助我:这是我写的源码。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
signed short int a;
signed short int b;
signed short int c;
a = 25;
b = 8;
c = 12;
cout << a << endl;
cout <<
我在一个论坛上遇到了这个问题。答案是这样的:
#define ISUNSIGNED(a) (a >= 0 && ~a >= 0)
//Alternatively, assuming the argument is to be a type, one answer would use type casts:
#define ISUNSIGNED(type) ((type)0 - 1 > 0)
我有几个关于this.Why的问题,我们需要检查~a >= 0吗?第二个解决方案是什么?我不明白“参数是一种类型”这句话。更重要的是,作者指出first #d
以下是c#代码:
static void Main(string[] args)
{
uint y = 12;
int x = -2;
if (x > y)
Console.WriteLine("x is greater");
else
Console.WriteLine("y is greater");
}
这是c++代码:
int _tmain(int argc, _TCHAR* argv[])
{
unsigned i
因为文字0 0xffffffff需要32位数字,所以它可以表示为无符号int,但不能表示为有符号int,并且它的类型是无符号int。但是,无符号整数的负数会发生什么呢?
#include <iostream>
#include <limits>
int main()
{
int N[] = {0,0,0};
if ( std::numeric_limits<long int>::digits==63 and
std::numeric_limits<int>::digits==31 and
std::numeric_li
在C++中,您可以获取无符号int的指针,并将其转换为指向有符号int (reinterpret_cast)的指针。
unsigned int a = 200;
int b = *(reinterpret_cast<int *>(&a));
我需要将生成在着色器中的int存储为unsigned int,这样才能将其写入带有无符号整数内部格式的纹理。在GLSL中是否有类似于C++的reinterpret_cast的替代方案?
我知道在C中,将无符号整数转换为有符号整数是定义的,但是对于C++来说是什么呢?我想应该有人已经问过这个了,但我找不到了。
我有一个函数,它操作一个无符号整数,并返回一个相关的无符号整数。我将该函数传递为一个有符号整数,方法是将其转换为类似于int num = -6; unsigned ret = func((unsigned)num); int ret_as_signed = (int)ret;的无符号整数。在Visual中,它工作得很好,但我想知道它的可移植性。
是否有一种可移植的方法将无符号整数转换为有符号整数?它有可能只是逆转有符号整数是如何转换为无符号通过环绕?谢谢
void fun(){
signed int a=-5;
unsigned int b=-5;
printf("the value of b is %u\n",b);
if(a==b)
printf("same\n");
else
printf("diff");
}
它正在打印:
4294967291
相同的
在第二行中,有符号值被转换为无符号值。所以b的值是UINTMAX +1-5= 4294967291。
我的问题是在比较操作中发生了什么。
1) a是否再次转换为无符
请参阅此代码片段
int main()
{
unsigned int a = 1000;
int b = -1;
if (a>b) printf("A is BIG! %d\n", a-b);
else printf("a is SMALL! %d\n", a-b);
return 0;
}
这给出了输出:A很小: 1001
我不明白这是怎么回事。>运算符在这里是如何工作的?为什么"a“比"b”小?如果它确实更小,为什么我会得到一个正数(1001)作为差值?
我的职能如下:
char f1( int a, unsigned b ) { return abs(a) <= b; }
为了加快执行速度,我想重写如下:
char f2( int a, unsigned b ) { return (unsigned)(a+b) <= 2*b; } // redundant cast
或者使用这个签名,即使对非阴性的b也可能有微妙的含义。
char f3( int a, int b ) { return (unsigned)(a+b) <= 2*b; }
这两种选择都可以在一个平台上进行简单的测试,但我需要它可以移植。假设非负b且不
为什么C#:
byte[] vals = new byte[] {223, 30, 244, 156};
int result = 0;
for(int i = 0; i <= 3; ++i) {
result <<= 8;
result |= vals[i];
}
print("RESULT: " + result);
产量:
RESULT: -551619428
而Python:
vals = array.array('B', [223, 30, 244, 156])
result = 0
for val in vals:
re