草庐IT

Unsigned

全部标签

c++浮点精度损失: 3015/0. 00025298219406977296

问题。MicrosoftVisualC++2005编译器,32位windowsxpsp3,amd64x2cpu。代码:doublea=3015.0;doubleb=0.00025298219406977296;//*((unsigned__int64*)(&a))==0x40a78e0000000000//*((unsigned__int64*)(&b))==0x3f30945640000000doublef=a/b;//3015/0.00025298219406977296;计算结果(即“f”)是11917835.000000000(((unsigned__int64)(&f))==

c++浮点精度损失: 3015/0. 00025298219406977296

问题。MicrosoftVisualC++2005编译器,32位windowsxpsp3,amd64x2cpu。代码:doublea=3015.0;doubleb=0.00025298219406977296;//*((unsigned__int64*)(&a))==0x40a78e0000000000//*((unsigned__int64*)(&b))==0x3f30945640000000doublef=a/b;//3015/0.00025298219406977296;计算结果(即“f”)是11917835.000000000(((unsigned__int64)(&f))==

c++ - 在没有 reinterpret_cast 的情况下将 unsigned char 转换为 std::string 的方法?

我在std::string中有一个我需要的unsignedchar数组,但我目前的方式使用我想避免的reinterpret_cast。有没有更清洁的方法来做到这一点?unsignedcharmy_txt[]={0x52,0x5f,0x73,0x68,0x7e,0x29,0x33,0x74,0x74,0x73,0x72,0x55}unsignedintmy_txt_len=12;std::stringmy_std_string(reinterpret_cast(my_txt),my_txt_len); 最佳答案 使用迭代器构造函数:s

c++ - 在没有 reinterpret_cast 的情况下将 unsigned char 转换为 std::string 的方法?

我在std::string中有一个我需要的unsignedchar数组,但我目前的方式使用我想避免的reinterpret_cast。有没有更清洁的方法来做到这一点?unsignedcharmy_txt[]={0x52,0x5f,0x73,0x68,0x7e,0x29,0x33,0x74,0x74,0x73,0x72,0x55}unsignedintmy_txt_len=12;std::stringmy_std_string(reinterpret_cast(my_txt),my_txt_len); 最佳答案 使用迭代器构造函数:s

c++ - 为什么 C++ 允许从 int 隐式转换为 unsigned int?

考虑以下代码:voidfoo(unsignedintx){}intmain(){foo(-5);return0;}此代码编译没有问题。像这样的错误会导致很多问题并且很难找到。为什么C++允许这样的转换? 最佳答案 简短的回答是因为C最初支持此类转换,并且他们不想破坏C++中的现有软件。请注意,某些编译器会对此发出警告。例如g++-Wconversion会对该构造发出警告。在许多情况下,隐式转换很有用,例如在计算中使用int时,但最终结果永远不会是负数(从算法中知道并且可以选择断言)。编辑:其他可能的解释:请记住,最初C是一种比现在C

c++ - 为什么 C++ 允许从 int 隐式转换为 unsigned int?

考虑以下代码:voidfoo(unsignedintx){}intmain(){foo(-5);return0;}此代码编译没有问题。像这样的错误会导致很多问题并且很难找到。为什么C++允许这样的转换? 最佳答案 简短的回答是因为C最初支持此类转换,并且他们不想破坏C++中的现有软件。请注意,某些编译器会对此发出警告。例如g++-Wconversion会对该构造发出警告。在许多情况下,隐式转换很有用,例如在计算中使用int时,但最终结果永远不会是负数(从算法中知道并且可以选择断言)。编辑:其他可能的解释:请记住,最初C是一种比现在C

c++ - 右移和有符号整数

在我的编译器上,以下伪代码(值替换为二进制):sint32word=(10000000000000000000000000000000);word>>=16;生成一个word,其位域如下所示:(11111111111111111000000000000000)我可以在所有平台和C++编译器上都依赖这种行为吗? 最佳答案 来自以下链接:INT34-C.Donotshiftanexpressionbyanegativenumberofbitsorbygreaterthanorequaltothenumberofbitsthatexist

c++ - 右移和有符号整数

在我的编译器上,以下伪代码(值替换为二进制):sint32word=(10000000000000000000000000000000);word>>=16;生成一个word,其位域如下所示:(11111111111111111000000000000000)我可以在所有平台和C++编译器上都依赖这种行为吗? 最佳答案 来自以下链接:INT34-C.Donotshiftanexpressionbyanegativenumberofbitsorbygreaterthanorequaltothenumberofbitsthatexist

c++ - 为什么 `std::byte` 是枚举类而不是类?

std::byte是一种抽象,它应该提供对C++中内存区域的类型安全(r)访问,从新标准17开始。但是,它是根据这种方式声明的至http://en.cppreference.com/w/cpp/types/byte:enumclassbyte:unsignedchar{};也就是说,它是一个没有任何枚举的枚举类。因为通常enums的目的是提供一组受限的枚举,这似乎有点奇怪。具有私有(private)unsignedchar成员的类似乎是更明显的方法。为什么会这样? 最佳答案 标准不要求具有unsignedchar成员的class与u

c++ - 为什么 `std::byte` 是枚举类而不是类?

std::byte是一种抽象,它应该提供对C++中内存区域的类型安全(r)访问,从新标准17开始。但是,它是根据这种方式声明的至http://en.cppreference.com/w/cpp/types/byte:enumclassbyte:unsignedchar{};也就是说,它是一个没有任何枚举的枚举类。因为通常enums的目的是提供一组受限的枚举,这似乎有点奇怪。具有私有(private)unsignedchar成员的类似乎是更明显的方法。为什么会这样? 最佳答案 标准不要求具有unsignedchar成员的class与u