考虑以下代码:
x = 1 # 0001
x << 2 # Shift left 2 bits: 0100
# Result: 4
x | 2 # Bitwise OR: 0011
# Result: 3
x & 1 # Bitwise AND: 0001
# Result: 1
Run Code Online (Sandbox Code Playgroud)
我可以理解Python(和其他语言)中的算术运算符,但我从来没有完全理解'按位'运算符.在上面的例子中(来自Python书),我理解左移但不是其他两个.
另外,实际使用的是按位运算符?我很欣赏一些例子.
我正在尝试编写代码将二进制文件读入缓冲区,然后将缓冲区写入另一个文件.我有以下代码,但缓冲区只存储文件中第一行的几个ASCII字符,没有别的.
int length;
char * buffer;
ifstream is;
is.open ("C:\\Final.gif", ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
FILE *pFile;
pFile = fopen ("C:\\myfile.gif", "w");
fwrite (buffer , 1 , sizeof(buffer) , pFile );
Run Code Online (Sandbox Code Playgroud) 我有一个带有〜已知二进制序列的字节数组.我需要确认二进制序列是它应该是什么.我已经尝试.equals过了==,但都没有奏效.
byte[] array = new BigInteger("1111000011110001", 2).toByteArray();
if (new BigInteger("1111000011110001", 2).toByteArray() == array){
System.out.println("the same");
} else {
System.out.println("different'");
}
Run Code Online (Sandbox Code Playgroud) 我正在浏览一些C++代码,发现这样的东西:
(a + (b & 255)) & 255
Run Code Online (Sandbox Code Playgroud)
双重和我生气,所以我想到:
(a + b) & 255
Run Code Online (Sandbox Code Playgroud)
(a并且b是32位无符号整数)
我很快写了一个测试脚本(JS)来证实我的理论:
for (var i = 0; i < 100; i++) {
var a = Math.ceil(Math.random() * 0xFFFF),
b = Math.ceil(Math.random() * 0xFFFF);
var expr1 = (a + (b & 255)) & 255,
expr2 = (a + b) & 255;
if (expr1 != expr2) {
console.log("Numbers " + a + " and " + b + " mismatch!");
break;
}
}Run Code Online (Sandbox Code Playgroud)
虽然剧本证实了我的假设(两个操作都是平等的),但我仍然不相信它,因为1) …
我有一个字符串数组,表示我想要转换为相应的基数为10的二进制数字(没有前导零).考虑:
binary 1011 becomes integer 11
binary 1001 becomes integer 9
binary 11 becomes integer 3 etc.
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法?我一直在探索java.lang.number.*而没有找到直接的转换方法.Integer.parseInt(b)产生一个整数EQUAL到String ...例如,1001变为1,001而不是9 ...并且似乎不包括输出基数的参数.toBinaryString转换方向是否错误.我怀疑我需要进行多步转换,但似乎无法找到正确的方法或子类组合.我也不确定领先零或缺少零的程度是一个问题.有人有什么好的指示指点我吗?
为什么每个人都使用base 64在网上传输二进制数据?我问,因为ASCII字符集有128个字符,理论上可以代表128个字符......
我发现使用Python读取二进制文件特别困难.你能帮我个忙吗?我需要阅读这个文件,它在Fortran 90中很容易阅读
int*4 n_particles, n_groups
real*4 group_id(n_particles)
read (*) n_particles, n_groups
read (*) (group_id(j),j=1,n_particles)
Run Code Online (Sandbox Code Playgroud)
具体来说,文件格式为:
Bytes 1-4 -- The integer 8.
Bytes 5-8 -- The number of particles, N.
Bytes 9-12 -- The number of groups.
Bytes 13-16 -- The integer 8.
Bytes 17-20 -- The integer 4*N.
Next many bytes -- The group ID numbers for all the particles.
Last 4 bytes -- The integer 4*N.
Run Code Online (Sandbox Code Playgroud)
我怎么用Python阅读?我尝试了一切,但从未奏效.我有没有机会在python中使用f90程序,读取这个二进制文件,然后保存我需要使用的数据?
我需要一种方法来获取python中字符串的二进制表示.例如
st = "hello world"
toBinary(st)
Run Code Online (Sandbox Code Playgroud)
有一个简洁的方法来做这个吗?
类似于如何定义十六进制或八进制的整数常量,我可以用二进制来完成吗?
我承认这是一个非常简单(和愚蠢)的问题.我的谷歌搜索空洞.
例如,一个字节B中的位是10000010,如何将字符串分配给字符串str,即str = "10000010".
编辑
我从二进制文件中读取字节,并存储在字节数组中B.我用System.out.println(Integer.toBinaryString(B[i])).问题是
(a)当位以(最左边)1开始时,输出不正确,因为它转换B[i]为负的int值.
(b)如果位开头0,则输出忽略0,例如,假设B[0]为00000001,1而不是输出00000001