我有以下代码:
System.out.println(0b11111111);
System.out.println((byte) 0b11111111);
Run Code Online (Sandbox Code Playgroud)
第一行打印
255
并打印第二行
-1
请问有人可以解释一下为什么结果会有所不同?(byte)铸造如何改变0b11111110它变成的数字-1?
谢谢!
我有一个双精度数字的文本文件.数字由换行符分隔.
1.58589
0.04151
0.03562
0.02866
0.04479
0.01562
0.0219
0.01162
0.0089
0.0123
0.00621
-0.0135
-0.0046
-0.01052
-0.00873
0.0018
0.00436
....
Run Code Online (Sandbox Code Playgroud)
如何将其转换为具有默认(系统)字节顺序的二进制文件?
编辑:
我不想压缩文件,只需确保连续存储双打,而文件中没有任何附加信息(标题等).
目标是能够稍后将文件直接读入内存并进行重新解释转换以获得double*数组(例如此处).
编辑2: 这个问题对整数提出了同样的问题,这更容易,因为二进制表示更简单.
编辑3:使用schaiba的提示可以将666.42转换为二进制数:
echo "obase=2;666.42" | bc
1010011010.011010
Run Code Online (Sandbox Code Playgroud)
但这包含一个点符号.我不知道如何将其写入文件.
使用gcc编译器,为什么uint32_t在设置MSB时这是-2147483648?它没有签名 - 不应该是积极的吗?
#include <stdio.h>
#include <stdint.h>
#define BIT_SET(a,b) ((a) |= (1<<(b)))
int main()
{
uint32_t var = 0;
BIT_SET(var, 31);
printf("%d\n", var); //prints -2147483648
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我可以从二进制文件中读取无符号整数,但其中一个值打印为负数.
预期价值:
45788331,281302247,461354227,13127,299215653,2356985123,
打印出的价值观:
45788331,281302247,461354227,13127,299215653,-1932982173,
第6个值打印为负数,但我正在读取未签名的整数列表?
我的代码如下
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * fp;
ssize_t read;
int r = 0;
fp = fopen("numbers.bin", "rb");
if (fp == NULL)
exit(-1);
while(fread(&r, sizeof(unsigned int), 1, fp) == 1)
{
printf("%d\n", r);
}
fclose(fp);
if (line) free(line);
exit(0);
}
Run Code Online (Sandbox Code Playgroud) 我想使用函数制作十进制到二进制的转换器,但我没有看到我的代码有什么问题:(错误表明我不能简单地将字符串转换为char但我已在第12行转换它).编辑 - 我对将denary转换为二进制而不是输出的过程感兴趣.
static void Main (string[] args)
{
Console.WriteLine("Decimal 14 = Binary " + dec_to_bin(14));
Console.WriteLine("Decimal 100 = Binary " + dec_to_bin(100));
Console.WriteLine("Decimal 32 = Binary " + dec_to_bin(32));
Console.WriteLine("Decimal 64 = Binary " + dec_to_bin(64));
Console.ReadLine();
}
public static string dec_to_bin(int dec)
{
string binary = "11111111";
char[]binaryArray = binary.ToCharArray();
for (int i = 0; i < 8; i++)
{
if (dec % 2 == 0)
{
binaryArray[i] = "0"; // error 1
}
else
{
binaryArray[i] = …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现霍夫曼树。
我想做一个简单测试的简单.txt文件的内容:
aaaaabbbbccd
Run Code Online (Sandbox Code Playgroud)
字符频率:a:5,b:4,c:2,d:1
代码表:(1 s和0 s的数据类型:字符串)
a:0
d:100
c:101
b:11
Run Code Online (Sandbox Code Playgroud)
我想写为二进制的结果:(22位)
0000011111111101101100
Run Code Online (Sandbox Code Playgroud)
如何将结果的每个字符作为二进制逐位写入“ .dat”文件?(不是字符串)
我是一名学生,正在研究二进制和十六进制.我想知道为什么我们需要将二进制数转换为十六进制数.它在现实生活中的用途是什么?
我正在编写一个二进制加法程序,但不确定为什么输入以零开头时输出是不正确的,当程序必须在输入之一的开头加上零以使它们相同时,输出也是不正确的长度。
a = input('Enter first binary number\t')
b = input('Enter second binary number\t')
carry = 0
answer = ""
length = (max(len(a),len(b))) - min(len(a),len(b))
if b > a:
a = length * '0' + a
elif a > b:
b = length * '0' + b
print(a)
print(b)
for i in range(len(a)-1, -1, -1):
x = carry
if a[i] == '1': x += 1
else: x = 0
if b[i] == '1': x += 1
else: x = 0
if …Run Code Online (Sandbox Code Playgroud) 我使用以下代码来计算MD5哈希码的二进制表示.
MD5 始终为 128个字节,并bin返回以"0b"开头的字符串.因此,长度md5_bin必须始终为130,但是当我运行程序时,它在128到130之间变化,在不同的值上random_str.
md5_bin = bin(int(hashlib.md5(random_str).hexdigest(),16))`
print len(md5_bin)
Run Code Online (Sandbox Code Playgroud) 我从PHP手册中遇到以下声明
Windows的PHP源代码和二进制发行版可以在» http://www.php.net/downloads.php找到。我们建议您选择离您最近的»镜像来下载发行版。
我的这种说法引起了以下疑问:
请有人用一种易于理解的语言消除我所有上述疑虑。