0xfffffffful为(签名)长:ub,stramp newine或ok ok
0xFFFFFFFFul as (signed) long: UB, Impl-defined or just OK?
将在所有理智(例如2-S补体算术)32位计算机上打印-1,llp64上的-1(即64位窗口,长为32位,)和所有64位UNIX OS的演出:ES(即在LP64 OS:ES上):
#include <iostream>
using std::cout;
int main()
{
long li = 0xfffffffful;
cout << "size of li: " << sizeof(li) << ", li: " << li << 'n';
}
通常,我对相关变量使用定义明确的大小,而std :: numeric_limits而不是'ul'数字常数。所以我会写
之类的东西const uint32_t MAX_INTERVAL = std::numeric_limits<uint32_t>::max();
const int64_t some_var = MAX_INTERVAL;
如果您至少有33位long
S,则没有问题(或更具体地说,如果可以将4294967295表示为long
)。该行为将被很好地定义为数字可以表示为long
。
如果您有32位long
S,仍然没有问题。然后定义了该行为,这意味着编译器/实现是要求指定行为的(很可能您最终会使用-1
,但是可能存在奇特的实现,这将产生另一个结果)。
标准的相关部分为4.7(积分转换):
如果目标类型未签名,则结果值是与源整数一致的最小未签名整数(modulo 2^n哪里 n 是用于表示无符号类型的位数)。[ 笔记: 在两个 补充表示,这种转换是概念性的,位模式没有变化(如果那里 没有截断)。 - 末端注释 ]
如果目标类型已签署,则值在目标类型中表示(和 位宽度);否则,该值是实现定义的。
相关文章:
- 为什么打印"OK"会改变输出?
- 句柄OK全部崩溃
- 修改数据是否由 const shared_ptr&Ok 传递?
- 谷歌模拟 - 怎么说"function must be called ONCE with a certain parameter but ok to be called many times with
- 如何修复张量流中的"Non-OK-status: Not found: Op type not registered 'NoOp' in binary running"
- 何时按值返回OK
- 0xfffffffful为(签名)长:ub,stramp newine或ok ok
- 如何实施"ok google"技术
- DLL函数名限制-函数名末尾的数字OK
- 当坏ip提供给CURLOPT_DNS_SERVERS时,Curl返回all ok
- 指向自己创建的结构的双指针-编译器说OK-Programm中止
- 创建一个脚本,使我自动登录到由 IP URL 访问的网站,包括"click OK to logon"
- 这是从容器中获取随机元素的OK范围的方法吗
- 只写对象的链接操作符= - OK返回rhs而不是*this
- 这个指针和所有参数在调用之后都是空的(但在调用之前是ok的)
- Ubuntu 下的 C++ 链接 Boost 库与 cMake:未定义的引用 'boost::iostreams::zlib::ok'
- 为动态创建的TComponent派生类实例传递一个NULL Owner参数OK
- 应用程序无法正确启动(0xc0000013).单击OK关闭应用程序
- 从内存效率的角度来看,在c++ 11中返回一个字符串OK
- 为什么getpeername()返回OK,结果却不是预期的