我正在学习关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,十进制到十六进制等等.今天我们刚刚学习了如何使用二进制补码(〜数字)将有符号/无符号数存储在内存中+ 1).
我们在纸上做了几个练习,我希望能够在向老师提交作业之前验证我的答案.我为前几个练习编写了一个C++程序,但现在我不知道如何通过以下问题验证我的答案:
char a, b;
short c;
a = -58;
c = -315;
b = a >> 3;
Run Code Online (Sandbox Code Playgroud)
我们需要在内存中显示二进制表示a
,b
和c
.
我已经在纸上完成了它,它给了我以下结果(在二进制补码后的数字内存中的所有二进制表示):
a = 00111010(它是一个字符,所以1个字节)
b = 00001000(它是一个字符,所以1个字节)
c = 11111110 11000101(它是一个短的,所以2个字节)
有没有办法验证我的答案?在C++中是否有一种标准方法可以在数字的内存中显示二进制表示,或者我是否必须自己编写每个步骤(计算二进制补码然后转换为二进制)?我知道后者不会花那么长时间,但我很好奇是否有一种标准的方法可以做到这一点.
由于难以在Google上阅读有关它们的定义,我无法理解定点和浮点数.但是我读过的没有提供一个简单的解释,说明它们到底是什么.我能用例子得到一个简单的定义吗?
我们都知道Android Activity的生命周期和Fragment的生命周期.但是有没有相同的观点?
例如,这可以帮助构建自定义视图或深入了解Android上非常常见且经常隐藏的图形操作.
提前致谢 !
如果 along int
和 aint
在平台上的表示相同,它们是否严格相同?根据 C 标准,这些类型在平台上的行为是否有任何不同?
例如。这是否总是有效:
int int_var;
long long_var;
void long_bar(long *l);
void int_bar(int *i);
void foo()
{
long_bar(&int_var); /* Always OK? */
int_bar(&long_var);
}
Run Code Online (Sandbox Code Playgroud)
我想同样的问题适用于 short 和 int,如果它们碰巧是相同的表示。
在讨论如何为int32_t
没有 stdint.h 的嵌入式 C89 编译器定义一个-like typedef时出现了问题,即 as int
orlong
以及是否重要。
我们毫无疑问地知道,ISO C标准(以及C++,我认为,虽然我对C方面更感兴趣)允许签名数字的三个基础表示:
维基百科的条目表明,60年代的IBM 7090使用了标志/幅度,PDP-1,CDC 160A和UNIVAC 1100使用的是补充,所有这些都可以追溯到60年代.
是否有其他任何具有这些替代表示的C(或底层硬件)实现,这些实现比五十年前更新了(它们是什么)?
对于不再存在的机器,保持某种标准似乎有点浪费.
我正在尝试从文件中读取元组的字符串表示,并将元组添加到列表中.这是相关的代码.
raw_data = userfile.read().split('\n')
for a in raw_data :
print a
btc_history.append(ast.literal_eval(a))
Run Code Online (Sandbox Code Playgroud)
这是输出:
(Decimal('11.66985'), Decimal('0E-8'))
Traceback (most recent call last):
File "./goxnotify.py", line 74, in <module>
main()
File "./goxnotify.py", line 68, in main
local.load_user_file(username,btc_history)
File "/home/unix-dude/Code/GoxNotify/local_functions.py", line 53, in load_user_file
btc_history.append(ast.literal_eval(a))
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
`File "/usr/lib/python2.7/ast.py", line 58, in _convert
return tuple(map(_convert, node.elts))
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
Run Code Online (Sandbox Code Playgroud) python parsing representation python-2.x abstract-syntax-tree
刚刚被我5岁的孩子问到:电脑里最大的数字是多少?
我们不是在谈论特定数据类型的最大数量,而是计算机可以表示的最大数量.
不允许使用无限.
更新我的孩子总是想要打印,所以让我们说计算机需要打印这个号码和孩子知道这是一个很大的数字.当然,在实践中我们不会打印,因为树木不够.
我一直在研究Haskell,我非常想在其中编写一个编译器(作为一种学习练习),因为它的许多先天特性可以很容易地应用于编译器(特别是一个递归的体面编译器).
我无法理解的是如何用Haskell-ian方式表示语言的语法.我的第一个想法是使用递归数据类型定义,但我无法看到我如何使用它们来匹配语言中的关键字("if").
非常感谢的想法和建议,
皮特
在Haskell中表示有限自动机的好方法是什么?它的数据类型如何?
在我们学院,自动机被定义为5元组
(Q, X, delta, q_0, F)
Run Code Online (Sandbox Code Playgroud)
其中Q是自动机状态的集合,X是字母表(这部分甚至是必要的),delta是从(Q,X)获取2元组并返回状态/ -s(在非确定性版本中)的转换函数, F是接受/结束状态的集合.
最重要的是,我不确定delta
应该有什么类型......
我们可以通过将该对象的点T
转换为a 来查看类型T*
对象的表示char*
.至少在实践中:
int x = 511;
unsigned char* cp = (unsigned char*)&x;
std::cout << std::hex << std::setfill('0');
for (int i = 0; i < sizeof(int); i++) {
std::cout << std::setw(2) << (int)cp[i] << ' ';
}
Run Code Online (Sandbox Code Playgroud)
这输出511
我的系统的表示:ff 01 00 00
.
(肯定)这里发生了一些实现定义的行为.哪个演员阵容允许我将一个转换int*
为一个unsigned char*
转换,哪个转换是否需要转换?我一投演就调用了未定义的行为?我可以投这样的任何T*
类型吗?这样做我能依靠什么?