我正在学习编程基础课程,目前我正在谈论有关计算机组织和位操作的章节 - CPU(ALU,CU,寄存器等)如何工作.
我对二进制语言有相当好的理解.我理解符号/幅度格式/ 1的补码,2的补码等.
在书中我已经知道半字节= 4位,8位= 1字节接下来是一个字 - 通常是组:8位,16位,32位或64位(依此类推),所有这些使得对我来说完美无缺.这是我的作业问题,这让我很困惑:
"一台计算机有64 MB的内存,每个字是4个字节.需要多少位来处理内存中的每个字?"
好吧,我现在很困惑.这本书告诉我一个字通常是8的倍数.但我知道1字节= 8位,所以因为有4个字节和1个字节= 8个字节,认为4个字节x 8位是否正确= 32位?这是答案吗?
我必须创建一个bitParity(int x)取整数的函数,1如果0在位形式中有奇数个,则返回x,0否则返回.
例如: bitParity(5) = 0, bitParity(7) = 1
但是,这很难,因为我只能在这个问题上使用位运算符(! ˜ & ˆ | + << >>是唯一合法的).这意味着,没有循环,if-then或任何类型的东西.可以使用常量.
到目前为止,我有什么不行的,但我想,我应该整数的位移位16,8以及4时间和XOR剩余的整数.
有人可以提供一些建议吗?谢谢.
特别是,我想预设所需的大小,从外部源获取位图,然后以优雅的面向对象的方式处理数据.
我猜是什么
我有这样的假设吗?
如果我们有一个十进制值:123
及其二进制版本:01111011
如何从该字节中将最左边的四个和最右边的四个位变为两个独立的int变量?
我的意思是:
int a = 7; // 0111 (the first four bits from the left)
int b = 11; // 1011 (the first four bits from the right)
Run Code Online (Sandbox Code Playgroud)
非常感激!
如果我创建一个空指针,并将一段内存分配给该空指针,我如何打印出我刚刚分配的各个位?
例如:
void * p;
p = malloc(24);
printf("0x%x\n", (int *)p);
Run Code Online (Sandbox Code Playgroud)
我想上面打印我刚刚分配的 24 位。
我正在尝试学习Verilog,但在示例中,我正在研究使用[NumberOfBits-1:0]命令,但我无法完全弄清它为什么存在以及它在做什么。这是我的代码:
module verilogmodule(Minuend,Subtrahend,SumDiff,CarryOut,Mode);
//4-bit adder and subtractor. Mode=0 to add and Mode = 1 to subtract
parameter NumberOfBits = 4;
input [NumberOfBits-1:0] Minuend, Subtrahend; input Mode;
output [NumberOfBits-1:0] SumDiff; output CarryOut;
wire [NumberOfBits-1:0] InverterOut;
wire [NumberOfBits-1:0] MuxOut;
wire [NumberOfBits-1:0] AdderLowCarryout;
//module not4bits(A3,A2,A1,A0,Y3,Y2,Y1,Y0);
not4bits U1 (Subtrahend[3], Subtrahend[2], Subtrahend[1], Subtrahend[0],InverterOut[3], InverterOut[2], InverterOut[1],InverterOut[0]);
//module mux4bits(A,B,Y,choice);
mux4bits U2(Subtrahend,InverterOut,MuxOut,Mode);
//module adder2bits(A,B,Cin, Sum, Cout);
adder2bits AdderLow(Minuend[1:0],MuxOut[1:0],Mode,SumDiff[1:0],AdderLowCarryout[1:0]);
adder2bits AdderHigh(Minuend[3:2],MuxOut[3:2],AdderLowCarryout[1:0],SumDiff[3:2],CarryOut);
endmodule
Run Code Online (Sandbox Code Playgroud) 我正在尝试检查并查看是否在unsigned int中设置了一个位.我不知道我怎么做到这一点,但我认为它会是这样的.我正在尝试用C++编写cdq指令(但是一个函数)
这就是我所拥有的
unsigned int cdq(unsigned int eax)
{
unsigned int edx = 0;
if( (eax >> 31) & 1 ) { edx = 0xFFFFFFFF; }
return edx
}
Run Code Online (Sandbox Code Playgroud)
当我使用具有以下值的函数时:
cdq(0x12345678)第31位设置为(1)所以它应该返回(unsigned int)-1 cdq(0x01)bit 31没有设置(0)所以它应该返回0
问题是它总是返回0,我不知道为什么
我有
uint32_t bits = 0;
bits |= 1<< 31;
bits |= 1<< 15;
bits |= 1<< 14;
bits |= 1<< 13;
Run Code Online (Sandbox Code Playgroud)
这给了我10000000000000001110000000000000
而在我做的另一个功能*(bits) |= 0 << 15;但它没有做任何事情,它应该将第16个1更改为0,所以以下应该来:10000000000000000110000000000000
任何帮助?
我坚持这个问题.谢谢你的协助.
你有两个整数,n和m.找到它们在二进制表示中不同的最右边位的位置(保证这样的位存在),从右到左计数.
返回2position_of_the_found_bit(从0开始)的值.
例
对于n = 11和m = 13,输出应该是不同的最右边比特(n,m)= 2.
11(下标10)= 1011(下标2),13(下标)10 = 1101(下标2),它们不同的最右位是二进制表示中右起第1位(0基)的位.所以答案是2到1次幂= 2.
我正在学习自己的编程.和任何(好的)学生一样,我遇到了障碍.
首先,我继续阅读-值的位可存储量为2.没人会说这是无论是 0或1.
其次 - 3位可以存储8个值......嗯......怎么样?
这在数学上是不是不可能吗?
如果我们有一个开关......一个开关能够:ON或OFF两个开关:
开关1:ON OFF ON OFF开关2:ON OFF OFF ON < - 四个值.
3位如何加起来8个值?
应该是六个吧?
开关1:ON OFF ON OFF开关2:ON OFF OFF ON开关3:ON OFF ON OFF
可以soomeone请帮忙!