Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法使用按位not运算符得到预期的答案。谢谢你的帮助 我正在努力学习C++书籍,试图学习一些东西。我被一件事困住了,按位不。我知道它翻转所有的位,但它是不工作我如何期待在C++中。这是相关代码 letter = 'A'; // dec = 65 hex = 0x41 binary = 0100 0001 cout << endl << "Bitwise NOT" << endl; cout << "Letter: " << letter << " = " << insertSpaces(toBinary(letter)) << endl; int notletter = ~letter; cout << "~Letter: " << notletter << endl; string insertSpaces(string binary) // insert spaces into a binary number string for readability { int pos = 4; int len = binary.length(); while (pos < len) { binary.insert(pos, " "); pos = pos + 5; // 5 because it includes space len++; // space makes length longer } return binary; } string toBinary(int letter) { string result = ""; while (letter > 0) { result = toString(letter % 2) + result; letter /= 2; } int rem = result.length() % 4; if (rem > 0) { int zeros = 4 - rem; for (int i = 0; i < zeros; i++) result = "0" + result; } return result; }_C++_Bit Manipulation - Fatal编程技术网

我无法使用按位not运算符得到预期的答案。谢谢你的帮助 我正在努力学习C++书籍,试图学习一些东西。我被一件事困住了,按位不。我知道它翻转所有的位,但它是不工作我如何期待在C++中。这是相关代码 letter = 'A'; // dec = 65 hex = 0x41 binary = 0100 0001 cout << endl << "Bitwise NOT" << endl; cout << "Letter: " << letter << " = " << insertSpaces(toBinary(letter)) << endl; int notletter = ~letter; cout << "~Letter: " << notletter << endl; string insertSpaces(string binary) // insert spaces into a binary number string for readability { int pos = 4; int len = binary.length(); while (pos < len) { binary.insert(pos, " "); pos = pos + 5; // 5 because it includes space len++; // space makes length longer } return binary; } string toBinary(int letter) { string result = ""; while (letter > 0) { result = toString(letter % 2) + result; letter /= 2; } int rem = result.length() % 4; if (rem > 0) { int zeros = 4 - rem; for (int i = 0; i < zeros; i++) result = "0" + result; } return result; }

我无法使用按位not运算符得到预期的答案。谢谢你的帮助 我正在努力学习C++书籍,试图学习一些东西。我被一件事困住了,按位不。我知道它翻转所有的位,但它是不工作我如何期待在C++中。这是相关代码 letter = 'A'; // dec = 65 hex = 0x41 binary = 0100 0001 cout << endl << "Bitwise NOT" << endl; cout << "Letter: " << letter << " = " << insertSpaces(toBinary(letter)) << endl; int notletter = ~letter; cout << "~Letter: " << notletter << endl; string insertSpaces(string binary) // insert spaces into a binary number string for readability { int pos = 4; int len = binary.length(); while (pos < len) { binary.insert(pos, " "); pos = pos + 5; // 5 because it includes space len++; // space makes length longer } return binary; } string toBinary(int letter) { string result = ""; while (letter > 0) { result = toString(letter % 2) + result; letter /= 2; } int rem = result.length() % 4; if (rem > 0) { int zeros = 4 - rem; for (int i = 0; i < zeros; i++) result = "0" + result; } return result; },c++,bit-manipulation,C++,Bit Manipulation,答案应该是190或1011110二进制,那么为什么我得到-66呢? 我使用Visual C++ 2010。< P>使用无符号整数,而不是签名的整数。你得到一个负数的原因是因为现在大多数计算机都使用 这是数据在按位not前后的样子: before | after 0100 0001 | 1011 1110 (实际上可能有32位,因为您使用的是int而不是char;这里最好使用的类型可能是uint8\u t) 在二的补码中,如果最高有效位为1,则数字为负数。不是的,是的。在2的恭维语中,

答案应该是190或1011110二进制,那么为什么我得到-66呢?
我使用Visual C++ 2010。

< P>使用无符号整数,而不是签名的整数。你得到一个负数的原因是因为现在大多数计算机都使用

这是数据在按位not前后的样子:

before     | after
0100 0001  | 1011 1110
(实际上可能有32位,因为您使用的是
int
而不是
char
;这里最好使用的类型可能是
uint8\u t


在二的补码中,如果最高有效位为1,则数字为负数。不是的,是的。在2的恭维语中,要对一个数字求反,可以取按位not并加1。如果取
1011110
并将其反转,则得到
01000001
。现在添加一个,结果是
0100010
。如果你把它转换成十进制,你会得到66。因为第一位是1,所以加上减号,得到-66,这是一个意外值。

使用无符号整数而不是有符号整数。你得到一个负数的原因是因为现在大多数计算机都使用

这是数据在按位not前后的样子:

before     | after
0100 0001  | 1011 1110
(实际上可能有32位,因为您使用的是
int
而不是
char
;这里最好使用的类型可能是
uint8\u t


在二的补码中,如果最高有效位为1,则数字为负数。不是的,是的。在2的恭维语中,要对一个数字求反,可以取按位not并加1。如果取
1011110
并将其反转,则得到
01000001
。现在添加一个,结果是
0100010
。如果你把它转换成十进制,你会得到66。由于第一位是1,所以加上负号,得到-66,这是一个意外值。

您正在处理中的有符号数字。该值已超过最大正值(127)并被换行到负空间


您可以将其打印为无符号字符/整数(即,
(unsigned int)notletter
static\u cast(notletter)
)。

您正在处理中的有符号数字。该值已超过最大正值(127)并被换行到负空间


您可以将其打印为无符号字符/整数(即,
(unsigned int)notletter
static_cast(notletter)
)。

请注意,结果将远大于他期望的
190
,除非他的平台有8位
int
s(这在AIK是不可能的)注意,结果将比<代码> 190代码/代码>要大很多——除非他的平台有8bit <代码> int s(这是不可能的),几乎和我不做C++一样混乱,所以我不能具体告诉你如何修复它。但是如果你的字符被签名,如果它不是,那么10111110=66,和我不做C++完全一样的混淆,所以我不能具体告诉你如何修复它,但是如果你的字符被签署了,10111110=-66,如果不是,则190。