相关疑难解决方法(0)

使用-1将所有位设置为true是否安全?

我已经看到这种模式在C&C++中使用了很多.

unsigned int flags = -1;  // all bits are true
Run Code Online (Sandbox Code Playgroud)

这是一个很好的便携式方法吗?或正在使用0xffffffff~0更好?

c c++ binary bit-fields

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

查找有符号和无符号整数是偶数还是两者都是奇数

我有一个int m和一个unsigned int j并且想要确定它们是偶数还是两者都是奇数.

过去我一直在使用

if((int(j)+m)%2)
Run Code Online (Sandbox Code Playgroud)

抓住只有一个奇怪的情况.但是我担心会int不正确地改变奇怪的偶数j.

这些都会遇到问题吗?

if(!(j%2)!=!(m%2))
if(bool(j%2)!=bool(j%2))
Run Code Online (Sandbox Code Playgroud)

我知道

if(j%2!=m%2)
Run Code Online (Sandbox Code Playgroud)

不起作用,因为'm%2'将产生-1何时m为负数,true无论价值j%2是多少,它总是会评估.

c++ c++11 c++14

31
推荐指数
5
解决办法
3385
查看次数

为什么unsigned short(multiply)unsigned short转换为signed int?

为什么unsigned short * unsigned short转换为intC++ 11?

int太小的这行代码为证明办理最大值.

cout << USHRT_MAX * USHRT_MAX << endl;
Run Code Online (Sandbox Code Playgroud)

在MinGW 4.9.2上溢出

-131071
Run Code Online (Sandbox Code Playgroud)

因为(来源)

USHRT_MAX = 65535(2 ^ 16-1)或更高*

INT_MAX = 32767(2 ^ 15-1)或更高*

(2^16-1)*(2^16-1) = ~2^32.


我应该期待这个解决方案有什么问题吗?

unsigned u = static_cast<unsigned>(t*t);
Run Code Online (Sandbox Code Playgroud)

这个计划

unsigned short t;
cout<<typeid(t).name()<<endl;
cout<<typeid(t*t).name()<<endl;
Run Code Online (Sandbox Code Playgroud)

给出输出

t
i
Run Code Online (Sandbox Code Playgroud)

gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
gcc version 4.8.2 (GCC)
MinGW 4.9.2
Run Code Online (Sandbox Code Playgroud)

g++ p.cpp
g++ -std=c++11 p.cpp
Run Code Online (Sandbox Code Playgroud)

这证明了t*t …

c++ types type-conversion integer-promotion c++11

22
推荐指数
4
解决办法
4619
查看次数

将unsigned int转换为signed int C.

我试图65529从一个转换unsigned int为签名int.我尝试做这样的演员:

unsigned int x = 65529;
int y = (int) x;
Run Code Online (Sandbox Code Playgroud)

但是y当它应该返回-7时仍然返回65529.这是为什么?

c int unsigned-integer

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

关于无符号整数下溢的C行为的问题

我已经在很多地方读过,整数溢出在C中定义得很好,与签名对应物不同.

下溢是一样的吗?

例如:

unsigned int x = -1; // Does x == UINT_MAX?
Run Code Online (Sandbox Code Playgroud)

谢谢.

我不记得在哪里,但我在某处读到无符号整数类型的算术是模块化的,所以如果是这种情况那么-1 == UINT_MAX mod(UINT_MAX + 1).

c types integer integer-overflow underflow

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

如何在C中将unsigned int转换或转换为int?

如果问题看起来很奇怪,我道歉.我正在调试我的代码,这似乎是问题,但我不确定.

谢谢!

c int unsigned types casting

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

将负值分配给unsigned int时会发生什么?

可能重复:
在C中签名为无符号转换 - 它总是安全吗?

假设我声明了unsigned int类型的变量: unsigned int x = -1;

现在-1的二进制补码(假设32位机器)为0xFFFFFFFF.现在,当我将此值赋给x时,值0x7FFFFFFF是否已分配给x?

如果是这样,则printf("%d",x); 会打印十进制等效的0x7FFFFFFF,对吧?但是,显然这没有发生,因为打印的值是-1.我在这里错过了什么?

编辑:我知道我们可以使用%u格式说明符来打印无符号值.但这无助于回答上述问题.

c unsigned

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

c ++在有符号和无符号之间进行隐式转换的代码的安全性

根据有符号和无符号整数类型之间的隐式转换规则,这里这里讨论,当unsigned int用a 求和时int,int首先将signed 转换为a unsigned int.

例如,考虑以下最小程序

#include <iostream>

int main()
{
   unsigned int n = 2;
   int x = -1;

   std::cout << n + x << std::endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,程序的输出是预期的1:x首先转换为a unsigned int,并且总和n导致整数溢出,给出"正确"的答案.

在像前一个代码,如果我知道肯定n + x是积极的,我可以假设的总和unsigned int n,并int x给出了预期值?

c++

13
推荐指数
1
解决办法
269
查看次数

类型转换为C中的unsigned

int a = -534;
unsigned int b = (unsigned int)a;
printf("%d, %d", a, b);
Run Code Online (Sandbox Code Playgroud)

版画 -534, -534

为什么没有发生类型转换?

我期待它 -534, 534


如果我修改代码

int a = -534;
unsigned int b = (unsigned int)a;
if(a < b)
  printf("%d, %d", a, b);
Run Code Online (Sandbox Code Playgroud)

它不打印任何东西......毕竟a不到b

c c++ casting

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

当我从C++中的有符号整数中减去无符号整数时会发生什么?

如果我做这样的事情会发生什么:

unsigned int u;
int s;

...
s -= u;
Run Code Online (Sandbox Code Playgroud)

这个的预期行为是什么:

1)假设无符号整数不是太大而不适合有符号整数?

2)假设无符号整数会溢出有符号整数?

谢谢.

c++ math

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