这样安全吗:
int main()
{
boost::int16_t t1 = 50000; // overflow here.
boost::uint16_t t2 = (boost::uint16_t)t1;
std::cout << t1 << " " << t2 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
更具体一点:我将这些数据存储在一个表中,该表在模式中使用了签名类型,是否可以安全存储,并以这种方式检索这些数据?
谢谢!
我一直在阅读Y2038问题,我明白time_t最终将恢复到最低可表示的负数,因为它会尝试"递增"符号位.
根据该Wikipedia页面,time_t无法更改为无符号整数,因为它会破坏处理早期日期的程序.(这是有道理的.)
但是,我不明白为什么它首先没有成为无符号整数.为什么不将1970年1月1日存储为零而不是一些荒谬的负数?
由于Java字节是有符号值,我正在尝试与C#程序建立TCP套接字连接,期望字节无符号.
我无法更改C#部分的代码.
如何使用Java以正确的格式发送这些字节.
谢谢
我想用Java翻译这个表达式
char tab[100];
tab[10] = '\xc0';
tab[48] = '\x80';
uint32_t w = 0x67452301;
uint32_t x = 0xefcdab89;
uint32_t y = 0x98badcfe;
uint32_t z = 0x10325476;
a = ((b & c) | (~b & d)) + (*(uint32_t*)(tab+0x00)) + a - 0x28955B88;
a = ((a << 0x07) | (a >> 0x19)) + b;
Run Code Online (Sandbox Code Playgroud)
我试过这个但是......
char[] tab = new char[64];
tab[10] = (char) 0xc0;
tab[48] = (char) 0x80;
Run Code Online (Sandbox Code Playgroud)
但是值不是正确的,是否有另一种方法在char []中分配\ 0x80?我怎样才能在java中解释这种类型的转换((uint32_t))?
非常感谢 !
这是我的代码:
int main(){
unsigned int z = 18;
z = z>>1;
std::cout << z << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我知道我的结果将是9但我不明白"z = z >> 1"这是什么?>>什么意思?我以为它只用于cin << z; 请解释.谢谢
在"整体促销"和"通常的算术转换"之后的下面的程序中,操作员的两个操作数-仍然存在unsigned long long.之后,C++ 11标准说:
5.7.3二元运算符的结果是第二个运算符从第一个运算符减去的结果.
标准是否更详细地定义了减法的确切执行方式(或者是指定义减法的其他文档)?
从较小的无符号整数中减去较大的无符号整数会产生未定义的行为吗?为什么?
是否执行分配c=a-b如下保证示例程序,作为c将-3在所有(甚至理论上)可能的机器架构兼容C++ 11标准,为什么?
int main()
{
unsigned long long a=2, b=5;
signed long long c=a-b;
}
Run Code Online (Sandbox Code Playgroud) 我有这个:
const unsigned float& distanceTo(const Point2D&){...}
Run Code Online (Sandbox Code Playgroud)
但VS2013告诉我,我有一个无效的类型说明符组合,我怎么必须把说明符返回一个对无符号浮点数的常量引用?
我不擅长C语言,只是遇到了一个我不明白的问题.代码是:
int main()
{
unsigned int a = 100;
unsigned int b = 200;
float c = 2;
int result_i;
unsigned int result_u;
float result_f;
result_i = (a - b)*2;
result_u = (a - b);
result_f = (a-b)*c;
printf("%d\n", result_i);
printf("%d\n", result_u);
printf("%f\n", result_f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
-200
-100
8589934592.000000
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)
因为(ab)是负的,而a,b是无符号的int类型,(ab)是微不足道的.乘以浮点类型数c后,结果为8589934592.000000.我有两个问题:
首先,为什么在将int类型数字2相乘并分配给int类型数字后,结果是非平凡的?
第二,为什么result_u是非平凡的,即使(ab)是负数,而result_u是无符号的int类型?
我使用Xcode测试此代码,编译器是默认的APPLE LLVM 6.0.
谢谢!
首先,这个问题有相关帖子: 为什么Int32最大值是0x7FFFFFFF?
但是,我想知道为什么十六进制值始终被视为无符号数量.
请参阅以下代码段:
byte a = 0xFF; //No error (byte is an unsigned type).
short b = 0xFFFF; //Error! (even though both types are 16 bits).
int c = 0xFFFFFFFF; //Error! (even though both types are 32 bits).
long d = 0xFFFFFFFFFFFFFFFF; //Error! (even though both types are 64 bits).
Run Code Online (Sandbox Code Playgroud)
出错的原因是因为十六进制值始终被视为无符号值,无论它们存储的数据类型如何.因此,对于所描述的数据类型,该值"太大".
int c = 0xFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
存储值:
-1
Run Code Online (Sandbox Code Playgroud)
而不是价值:
4294967295
Run Code Online (Sandbox Code Playgroud)
仅仅因为int是签名类型.
我怎么能存储这些位转换成这些数据类型,而不诉诸使用ushort,uint和ulong?
特别是,long考虑到我不能使用更大的签名数据类型,我怎样才能实现数据类型?
我刚刚发现了固定大小的类型,可以在stdint.h/cstdint中找到.其中一些是"普通"类型,如int32_t,一些设计为无符号,如uint64_t.在使用未设计的类型时,是否需要使用"unsigned"关键字?