可能重复:
这个C++代码是什么意思?
在以下C++代码中
# include <stdio.h>
int main()
{
struct clap
{
int i:2;
int j:2;
int k:3;
}x={1,2,3};
printf("%d %d %d",x.i,x.j,x.k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在运行以下代码时,我得到输出1 -2 3
请参考上面的代码解释":"运算符的含义,以及这种奇怪输出的原因;
我需要帮助使用2的表示法减去二进制,并为每个数字使用5位:
1)-9 -7 =?有溢出吗?
-9 = 01001(2的补码= 10111)和-7 = 00111(2的补码= 11001)
现在我们需要添加因为我们正在使用2的补码
10111 +11001 = 100000但这个答案没有意义.此外,我假设有溢出,因为答案中有超过5位.
2)6 - 10,与以前相同的过程.负二进制数对我没有意义
我想知道是否有一种方法可以像使用Python中的C/C++那样使用标准库(最好是在bitarray上)进行二进制补码符号扩展.
C/C++:
// Example program
#include <iostream>
#include <string>
int main()
{
int x = 0xFF;
x <<= (32 - 8);
x >>= (32 - 8);
std::cout << x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我编写的Python函数(在我的测试中)完成同样的事情.我只是想知道是否有内置(或更快)的方式:
def sign_extend(value, bits):
highest_bit_mask = 1 << (bits - 1)
remainder = 0
for i in xrange(bits - 1):
remainder = (remainder << 1) + 1
if value & highest_bit_mask == highest_bit_mask:
value = (value & remainder) - highest_bit_mask
else:
value = value & remainder
return value
Run Code Online (Sandbox Code Playgroud) -2一个人的补充是100000 ... 01
-2两个补码是1000000 ...... 10
-2 >>> 1
Run Code Online (Sandbox Code Playgroud)
根据>>>定义,左侧移位为0
应该是这样的 01000......1,为什么变成0111111..11什么?
我理解二进制是如何工作的,我可以计算二进制到十进制,但我在签名数字周围丢失了.我找到了一个可以进行转换的计算器.但我不确定如何找到最大值和最小值或转换如果没有给出二进制数,StackO中的问题似乎是关于转换特定数字或不包括带符号数字到特定位.
具体问题是:
We have only 5 bits for representing signed numbers in two's complement:
What is the highest signed integer?
Write its decimal value (including the sign only if negative).
What is the lowest signed integer?
Write its decimal value (including the sign only if negative).
Run Code Online (Sandbox Code Playgroud)
好像我必须在二进制概念上更重,我只有2个月的编程,我以为我知道二进制转换.
我正在尝试在 Shellscript(Bash) 中创建一个简单的程序来计算 2 的补码二进制数。
作为测试,我只使用了 8 位二进制值 (00000100),但我不断收到“Bad Substitution”错误,我不知道为什么。
#!/bin/bash
binary=00000100
firstBit=${binary:0:1}
secondBit=${binary:1:1}
thirdBit=${binary:2:1}
fourthBit=${binary:3:1}
fifthBit=${binary:4:1}
sixthBit=${binary:5:1}
seventhBit=${binary:6:1}
eighthBit=${binary:7:1}
binaryNew=""
if [[ $firstBit == "1" ]]
then
binaryNew=0
if [[ $secondBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $thirdBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $fourthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $fifthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if [[ $sixthBit == "1" ]]
then
binaryNew+=0
else
binaryNew+=1
if …Run Code Online (Sandbox Code Playgroud) 我有一个传感器,它以三个字节输出.我这样看了:
unsigned char byte0,byte1,byte2;
byte0=readRegister(0x25);
byte1=readRegister(0x26);
byte2=readRegister(0x27);
Run Code Online (Sandbox Code Playgroud)
现在我想将这三个字节合并为一个数字:
int value;
value=byte0 + (byte1 << 8) + (byte2 << 16);
Run Code Online (Sandbox Code Playgroud)
它给出了从0到16,777,215的值,但我期望从-8,388,608到8,388,607的值.我虽然int已经通过其实施签署了.即使我尝试定义它signed int value;仍然只给我正数.所以我想我的问题是如何将int转换为它的两个补码?
谢谢!
我正在开始使用Python编程.我正在阅读一本基础教程,但这一点对我来说并不是很清楚.我很感激你能给我的任何帮助.
我有一个样本问题w=1,y=7,z=0,x = ~(w && y) | y;解决的办法是x = -1,但我想不通为什么?
这是我的思考过程:
(w && y)=(1 && 7)= 1
~11
比特是0000 0001
〜1比特是1111 1110
不知道该怎么做.
如何无符号的字符,例如,从取值-128到+127?根据我的理解,最重要的位用于表示数字的符号,而字符的剩余位用于表示数字的大小.现在,7位的最大可能幅度是127,所以范围不应该从?-127到+127?怎样才能-128有一个结果?
其次,以下行为背后的位级逻辑是什么
#include <stdio.h>
int main()
{
signed char x = 127;
x += 1;
printf("%i", x);
}
Run Code Online (Sandbox Code Playgroud)
输出:
-128
Run Code Online (Sandbox Code Playgroud)
人们可以看到,x成为-128,但为什么呢?这种行为背后的算法是什么?
twos-complement ×10
binary ×3
c ×3
bash ×1
bit ×1
bit-fields ×1
bits ×1
c++ ×1
java ×1
math ×1
operators ×1
puzzle ×1
python ×1
subtraction ×1
unsigned ×1