正如你在这里看到的,我有一个无符号变量和一个带有相同二进制值但不同小数结果的带符号变量.
uint unsigned = 0xFFFFFFFF; // 4,294,967,295
int signed = 0xFFFFFFFF; // -1
Run Code Online (Sandbox Code Playgroud)
我真的很困惑!在所有32/64位全部打开之后,机器如何区分有符号和无符号.是否有一个完全用于此的CPU 标志?CPU如何知道无符号和有符号数之间的区别?试着理解这几个小时的概念!
或者......另一个例子......让我们拿4位:
// 1 1 0 1 <--- -3
// 0 0 1 0 <--- 2
Run Code Online (Sandbox Code Playgroud)
如果我们从-3减去2,结果将是:
// 1 0 0 1 <--- -1 or 9???
Run Code Online (Sandbox Code Playgroud)
cpu将产生该结果,但我的应用程序如何知道它是-1还是9?在编译时已知预期的结果类型?
另一个例子...
int negative = -1;
Console.WriteLine(negative.ToString("X")); //output FFFFFFFF
uint positive = 0xFFFFFFFF;
Console.WriteLine(positive.ToString("X")); //output FFFFFFFF
Run Code Online (Sandbox Code Playgroud)
稍后编辑:
我用这些东西搞砸了一点,我觉得我得到了它,请纠正我,如果我错了:我们有以下例子:
sbyte positive = 15; //0xF ( 0000 1111)
sbyte negative = unchecked((sbyte)-positive); //0xF01;( 1111 0001)
sbyte …Run Code Online (Sandbox Code Playgroud) 首先抱歉我的英语不好。
我有两个二进制文件。
我将二进制文件分别存储到缓冲区中。
然后我使用 strcmp() 比较了两个缓冲区。
strcmp() 的结果为零。
所以我认为两个二进制是相同的。
打开两个二进制文件,然后检查是否有差异。
但我发现差别不大。
问题是什么?
strcmp() 函数不是将二进制与二进制进行比较的正确方法?
我正在研究 Rust 中的按位运算符,我发现
println!("{:X}", 1 << 4);
Run Code Online (Sandbox Code Playgroud)
打印出 10,但 2^4 应等于 16。
进一步实验,使用权力:
let base: i32 = 2;
for i in 1..=5 {
print!("{:X} ", base.pow(i));
}
Run Code Online (Sandbox Code Playgroud)
2 4 8 10 20会在应该打印的时候打印出来
2 4 8 16 32
只是想知道你是否可以向我指出 Rust 文档中强调为什么 Rust 中的二进制文件会这样工作的任何内容?我可以用什么来实现 2^4 = 16 呢?
在8位的整数编码中,10101010您有0-255种可能性.
共有256种不同的可能性,因为有8个1和0.如果我有10位而不是8位,我将获得多少种不同的可能性?
我如何在PHP中计算?
我正在用C#.net开发一个应用程序.我必须做一个快速的十六进制到二进制转换.我所做的是......
rtpPTypeNum = string.Join(string.Empty, udp.Payload.ToHexadecimalString().Substring(2, 2).Select(C => Convert.ToString(Convert.ToInt32(C.ToString(), 16), 2).PadLeft(4, '0'))).Substring(1, 7);
Run Code Online (Sandbox Code Playgroud)
我已经检查了它的性能,但这对我来说还不够好.
udp.Payload.ToHexadecimalString() 返回一个十六进制数字字符串.
在这个转换中,我必须做大约9000次迭代.
你能给我一个更好的方法吗?
我写了这个,当我启动它时,它给了我所有的可能性。我希望它只给我一个与我输入的字符相对应的字符。你能告诉我这里有什么问题吗?提前致谢。
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char letter='b';
while(letter!='end')
{
cout<<"What is the letter you wanna convert?"<<endl;
cin >> letter;
if(letter='A') {cout<<"01000001"<<endl;}
if(letter='B') {cout<<"01000010"<<endl;}
if(letter='C') {cout<<"01000011"<<endl;}
if(letter='D') {cout<<"01000100"<<endl;}
if(letter='E') {cout<<"01000101"<<endl;}
if(letter='F') {cout<<"01000110"<<endl;}
if(letter='G') {cout<<"01000111"<<endl;}
if(letter='H') {cout<<"01001000"<<endl;}
if(letter='I') {cout<<"01001001"<<endl;}
if(letter='J') {cout<<"01001010"<<endl;}
if(letter='K') {cout<<"01001011"<<endl;}
if(letter='L') {cout<<"01001100"<<endl;}
if(letter='M') {cout<<"01001101"<<endl;}
if(letter='N') {cout<<"01001110"<<endl;}
if(letter='O') {cout<<"01001111"<<endl;}
if(letter='P') {cout<<"01010000"<<endl;}
if(letter='Q') {cout<<"01010001"<<endl;}
if(letter='R') {cout<<"01010010"<<endl;}
if(letter='S') {cout<<"01010011"<<endl;}
if(letter='T') {cout<<"01010100"<<endl;}
if(letter='U') {cout<<"01010101"<<endl;}
if(letter='V') {cout<<"01010110"<<endl;}
if(letter='W') {cout<<"01010111"<<endl;}
if(letter='X') {cout<<"01011000"<<endl;}
if(letter='Y') {cout<<"01011001"<<endl;}
if(letter='Z') {cout<<"01011010"<<endl;}
if(letter='a') {cout<<"01100001"<<endl;}
if(letter='b') …Run Code Online (Sandbox Code Playgroud) 我开始使用termcaps,我看到了这种操作.
term.c_lflag &= ~(ICANON);
我知道&=是一个binary AND,我不是很舒服.
为什么不简单地使用=或制作一个#define,又&= ~做什么?
我整理了一些扩展方法,用于将数字值转换为它们的二进制等效项。
但是我遇到了一个问题。
我们可以使用Convert.ToString()重载将这些类型转换为二进制:
Byte
Short
Integer
Long
Run Code Online (Sandbox Code Playgroud)
例如:
Dim iInteger As Integer
Dim sBinary As String
iInteger = Integer.MaxValue
sBinary = Convert.ToString(iInteger, 2)
Run Code Online (Sandbox Code Playgroud)
但是Single接受基值并没有过载。单参数重载返回科学计数法,而不是二进制值。
我试过了这段代码,改编自以下答案:
Public Function ToBinary(Value As Single) As String
Dim aBits As Integer()
Dim _
iLength,
iIndex As Integer
Select Case Value
Case < BitLengths.BYTE : iLength = 7
Case < BitLengths.WORD : iLength = 15
Case < BitLengths.DWORD : iLength = 31
Case < BitLengths.QWORD : iLength = 63
End …Run Code Online (Sandbox Code Playgroud) 我正在使用java,我正在尝试使用不同基数(2,8和10)的数字.
所以,我问这个问题是将字符串格式的二进制数改成基数为10的数字
例如110000001010100000000000000000111111/base 2
我尝试了Integer.parseInt(str,radix),但是我遇到了错误.exepetion""线程中的异常"main"java.lang.NumberFormatException:对于java.lang上的java.lang.NumberFormatException.forInputString(Unknown Source)java.lang.Integer.parseInt(Unknown Source)中的输入字符串:"110000001010100000000000000111111" .Integer.parseInt(未知来源)